C# 之抽象类和浮泛方法

abstract 修饰符用于表示所修饰的类是不完全的,并且它只好作为基类。抽象类与非抽象类在以下方面是区别的:

除开在宣称和调用语法上不相同外,抽象属性的作为与画饼充饥方法一致。

抽象类具有以下特征:

概述:abstract 关键字 
抽象类不能够被实例化,抽象方法不可能有方法体,抽象类中的全体抽象方法必须在子类中重写(override ),3个抽象类能够同时含有抽象方法和非抽象方法。

在章程或性质表明中应用 abstract 修饰符以提示此格局或品质不分包完成。

  • 抽象类无法一贯实例化,并且对抽象类使用 new 运算符是编写翻译时不当。即使有个别变量和值在编写翻译时的连串可以是架空的,但是这么的变量和值必须或许为 null,只怕隐含对非抽象类的实例的引用(此非抽象类是从抽象类派生的)。
  • 同意(但不必要)抽象类包蕴抽象成员。
  • 抽象类无法被密封。

MSDN中C#言语专业的:10.1.1.1抽象类。此文如下:

那么大家怎么着时候应该用抽象类呢?
即使三个类设计的目点是用来被其余类继承的,它象征一类对象的所具备的集体性质或艺术,那三个那些类就应当设置为抽象类。

抽象类 A 引入抽象方法 F。类 B 引入另一个办法 G,但出于它不提供 F 的实现,B 也亟须注脚为抽象类。类 C 重写 F,并提供贰个实际贯彻。由于 C 中并未了止渴望梅成员,由此得以(但绝不必须)将 C 证明为非抽象类。

abstract class A
 {
 public abstract void F();
 }
 abstract class B: A
 {
 public void G() {}
 }
 class C: B
{
public override void F() {
// actual implementation of F
}
}

当从抽象类派生非抽象类时,那些非抽象类必须切实贯彻所继承的装有抽象成员,从而重写这一个抽象成员。在底下的演示中

架空方法具有以下特征:

  • 泛泛方法是隐式的 virtual 方法。
  • 只允许在抽象类中利用抽象方法注明。
  • 因为虚无方法表明不提供实完成,所以没有方法体;方法注明只是以一个支行结束,并且在签订契约后没有大括号
    ({ })。例如:

    public abstract void MyMethod();
    
  • 落到实处由 overriding 方法提供,它是非抽象类的分子。

  • 在抽象方法评释中动用 static 或 virtual 修饰符是一无所能的。

 

在类注明中应用 abstract 修饰符以提醒类只好是别的类的基类。

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

**abstract **修饰符可以和类、方法、属性、索引器及事件联合行使。

  • 在静态属性上利用 abstract 修饰符是不当的。
  • 在派生类中,通过包罗采纳 override 修饰符的习性注脚能够重写抽象的存在延续属性。
  • 抽象类不能够实例化。
  • 抽象类能够蕴含抽象方法和虚幻访问器。
  • 不能够用 sealed 修饰符修改抽象类,那代表该类无法被接续。
  • 从抽象类派生的非抽象类必须归纳继续的保有抽象方法和浮泛访问器的实完结。