抽象类abstract

 

 ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_csref/html/b0797770-c1f3-4b4d-9441-b9122602a6bb.htm 

抽象类的用途是提供多个派生类可共享的基类的公共定义。例如,类库可以定义一个作为其多个函数的参数的抽象类,并要求程序员使用该库通过创建派生类来提供自己的类实现。

抽象类具有以下特性:

  • 抽象类不能实例化。

  • 抽象类可以包含抽象方法和抽象访问器。

  • 不能用 sealed(C# 参考)修饰符修改抽象类,这意味着抽象类不能被继承。

  • 从抽象类派生的非抽象类必须包括继承的抽象方法和抽象访问器的实实现。

在方法或属性声明中使用 abstract 修饰符以指示方法或属性不包含实现。

抽象方法具有以下特性:

  • 抽象方法是隐式的虚方法。

  • 只允许在抽象类中使用抽象方法声明。

  • 因为抽象方法声明不提供实际的实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号 ({ })。例如:

    public abstract void MyMethod();
  • 实现由一个重写方法提供,此重写方法是非抽象类的成员。

  • 在抽象方法声明中使用 staticvirtual 修饰符是错误的。

除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样。

  • 在静态属性上使用 abstract 修饰符是错误的。

  • 在派生类中,通过包括使用 override 修饰符的属性声明,可以重写抽象的继承属性。

抽象类必须为所有接口成员提供实现。

实现接口的抽象类可以将接口方法映射到抽象方法上。例如:

interface I
{
    void M();
}
abstract class C: I
{
    public abstract void M();
}

============================================================

总结以下几点:

1.抽象类可以继承类,可以继承接口
   示例一:

Code

   示例二:

Code

 

2.当抽象类从基类继承虚方法时,抽象类可以使用抽象方法重写该虚方法。例如:

Code

3

如果将虚方法声明为抽象方法,则它对于从抽象类继承的所有类而言仍然是虚的。继承抽象方法的类无法访问该方法的原始实现。在前面的示例中,类 F 上的 DoWork 无法调用类 D 上的 DoWork。在此情况下,抽象类可以强制派生类为虚方法提供新的方法实现。

.

posted @ 2009-10-13 12:17  .NET钉子户  阅读(246)  评论(0)    收藏  举报