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); } }