Welcome

首页 / 软件开发 / C# / C#中的abstract与virtual

C#中的abstract与virtual2011-07-31abstract

abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。

在类声明中使用 abstract 修饰符以指示类只能是其他类的基类。

抽象类具有以下特性:

·抽象类不能实例化。

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

·不能用 sealed 修饰符修改抽象类,这意味着该类不能被继承。

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

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

抽象方法具有以下特性:

·抽象方法是隐式的 virtual 方法。

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

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

·实现由 overriding 方法提供,它是非抽象类的成员。

·在抽象方法声明中使用 static 或 virtual 修饰符是错误的。

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

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

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

virtual

virtual 关键字用于修改方法或属性的声明,在这种情况下,方法或属性被称作虚拟成员。虚拟成员的实现可由派生类中的重写成员更改。

调用虚方法时,将为重写成员检查该对象的运行时类型。将调用大部分派生类中的该重写成员,如果没有派生类重写该成员,则它可能是原始成员。

默认情况下,方法是非虚拟的。不能重写非虚方法。

不能将 virtual 修饰符与以下修饰符一起使用:

static abstract override

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

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

·通过包括使用 override 修饰符的属性声明,可在派生类中重写虚拟继承属性。

override(覆盖上面两种关键字修饰方法)