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#中的抽象基类隐含了一个事实:它内部的方法应该是纯虚函数,它支持多态(动态联编)

posted on 2006-09-01 13:29  Leetle  阅读(580)  评论(0编辑  收藏  举报

导航