C#中抽象基类的隐含意义
在C++中我们把包含有虚函数的类称为抽象基类,而将包含纯虚函数的类称为纯虚基类。虚拟函数说明类支持动态联编。在C#中我们可以看到类中有虚函数,当然也就可以支持动态联编(多态)。但是却没有了纯虚函数这个概念了(在C++中纯虚函数是这样的:virtual void F()=0),而是采用了关键词abstract来说明一个类是抽象基类。那么C#中这个抽象基类支持多态或者动态联编吗?
//抽象基类支持动态联编吗?
using System;
abstract class A
{
public abstract void F();
}
class B:A
{
public override void F()
{
Console.WriteLine("B.void F()");
}
}
class C:B
{
public override void F()
{
Console.WriteLine("C.void F()");
}
}
class MainClass
{
public static void Main()
{
A a1 = new B();
A a2 = new C();
B b1 = (B)a2;
a1.F();
a2.F();
b1.F();
}
}
结果:
B.void F()
C.void F()
C.void F()
结论:C#中的抽象基类隐含了一个事实:它内部的方法应该是纯虚函数,它支持多态(动态联编)