c# 抽象类(转)
C#允许把类和函数声明为abstract,抽象类不能实例化,而抽象函数没有执行代码,必须在非抽象的派生类中重写。显然,抽象函数也是虚拟的(但也不需要提供virtual关键字,实际上,如果提供了该关键字,就会产生一个语法错误)。如果类包含抽象函数,该类将也是抽象的,也必须声明为抽象的:
abstract class Building
{
public abstract decimal CalculateHeatingCost(); // abstract method
}
C++开发人员要注意C#中的一些语法区别。C#不支持采用=0语法来声明抽象函数。在C#中,这个语法有误导作用,因为可以在类声明的成员字段上使用=<value>,提供初始值:
abstract class Building
{
private bool damaged = false; // field
public abstract decimal CalculateHeatingCost(); // abstract method
}
注意:
C++开发人员还要注意术语上的细微差别:在C++中,抽象函数常常声明为纯虚函数,而在C#中,仅使用抽象这个术语。
C#中的抽象类
1、声明一个抽象方法使用abstract关键字。
2、一个类中可以包含一个或多个抽象方法。
3、抽象类中可以存在非抽象的方法。
4、抽象类不能被直接被实例化。
5、实现抽象类用“:”(冒号),实现抽象方法用override关键字。
6、抽象类可以被抽象类所继承,结果仍是抽象类。
7、抽象方法被实现后,不能更改修饰符。
DEMO:
public abstract class Person
{
public abstract void SayHello();
public void about()
{
Console.WriteLine("Abstract Demo");
}
}
public class Student : Person
{
public override void SayHello()
{
Console.WriteLine("SayHello");
}
}
class MainClass
{
public static void Main()
{
new Student().SayHello();
}
}
c#里面用抽象方法实现多态性
public class abstract operate()
{
protected string a,b;
public operate(string _a,_b)
{
this.a=_a;
this.b=_b;
}
public abstract string op(); //定义抽象函数;在字类中实现;
}
public class sum():operate()
{
sum():base(string a,string b); //调用父类的析造函数初始化数据;
public string op(string a,string b)
{
return a+b;
}
}
public class sub():operate()
{
sub:base(string a,string b);
public string op(string a,string b)
{
return a-b;
}
}
public class muli():operate()
{
sub:base(string a,string b)
public string op(string a,string b)
{
return a*b;
}
}
public realize()
{
operate sum=new sum(string a,string b); //调用sum类;
string result1=sum.op();
operate sub=new sub(string a,string b); //调用sub类;
string result2=sub.op();
operate mul=new mul(string a,string b);//调用mul类;
string result3=mul.op();
console.write("the firstnumber {0} second {1} third {2}",result2,result2,result3);
}
}
浙公网安备 33010602011771号