C# 之抽象类和架空方法

概述:abstract 关键字 
抽象类非克叫实例化,抽象方法不可知生出方法体,抽象类吃的具有抽象方法要以子类中重写(override ),一个虚无类可又富含抽象方法以及未抽象方法。

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

当接近声明遭使 abstract 修饰符以指示类只能是其余类似的基类。

空泛类有以下特征:

  • 虚幻类非可知实例化。
  • 空洞类可蕴涵抽象方法和架空访问器。
  • 匪能够为此 sealed 修饰符修改抽象类,这意味着该类不可知于连续。
  • 自从抽象类派生的非抽象类必须概括继续的保有抽象方法与浮泛访问器的实实现。

于方或者性能声明中使 abstract 修饰符以指示此方式或者性质不包含实现。

泛方法有以下特征:

  • 泛泛方法是隐式的 virtual 方法。
  • 单单同意在空洞类吃动用抽象方法声明。
  • 以虚无方法声明不提供实实现,所以没有方法体;方法声明只是以一个分行结束,并且于签约后无大括号
    ({ })。例如:

    public abstract void MyMethod();
    
  • 兑现由 overriding 方法供,它是休抽象类的成员。

  • 每当抽象方法声明遭使用 static 或 virtual 修饰符是荒谬的。

除此之外以声明与调用语法上不同外,抽象属性之一言一行与虚空方法一致。

  • 当静态属性上动 abstract 修饰符是左的。
  • 在派生类中,通过包括以 override 修饰符的属性声明可以重写抽象的累属性。

泛类必须为具接口成员提供实现。

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

abstract 修饰符用于表示所修饰的近乎是无完全的,并且其只能当基类。抽象类以及非抽象类在偏下地方是差的:

  • 架空类非克一直实例化,并且针对抽象类使用 new 运算符是编译时不当。虽然片段变量和价值当编译时之色可以是抽象的,但是这样的变量和价值必须要也 null,或者隐含指向非抽象类的实例的援(此非抽象类是自空洞类派生的)。
  • 允许(但不要求)抽象类富含抽象成员。
  • 虚幻类不可知给封。

当由虚无缥缈类派生非抽象类时,这些不抽象类必须实际落实所累的兼具抽象成员,从而重写那些抽象成员。在脚的示范中

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

抽象类 A 引入抽象方法 F。类 B 引入另一个主意 G,但出于它们不提供 F 的实现,B 也亟须声明也抽象类。类 C 重写 F,并提供一个现实贯彻。由于 C 中尚无了抽象成员,因此可(但不要要)将 C 声明也非抽象类。

这就是说我们什么时应该用抽象类为?
而一个看似设计之目点是为此来被其他类继承的,它象征一律接近对象的所所有的集体属性或方法,那个是仿佛就相应安装为抽象类。