abstract 修饰符可用于类、方法、属性、索引和事件。
在类声明时使用 abstract 修饰符来指示某个类仅用作其他类的基类,而不用于自行进行实例化。 abstract修饰的类称为抽象类,抽象类具有以下功能:
抽象类不能实例化。
抽象类可能包含抽象方法和访问器。
无法使用 sealed 修饰符来修改抽象类,因为两个修饰符的含义相反。 sealed 修饰符阻止类被继承,而 abstract 修饰符要求类被继承。
派生自抽象类的非抽象类,必须包含全部已继承的抽象方法和访问器的实际实现。
由abstract 修饰的方法、属性的成员,叫做抽象成员,例如抽象方法,抽象属性。该抽象方法或属性不包含实现。
抽象方法是隐式的虚拟方法。
只有抽象类中才允许抽象方法声明。
由于抽象方法声明不提供实际的实现,因此没有方法主体;方法声明仅以分号结尾,且签名后没有大括号 ({ })。
抽象方法没有实现,所以方法定义后面是分号,而不是常规的方法块。
例如:
public abstract class A
{
public abstract void DoWork(int i);
}
实现由方法 override 提供,它是非抽象类的成员。
在抽象方法声明中使用 static 或 virtual 修饰符是错误的。
除了声明和调用语法方面不同外,抽象属性的行为与抽象方法相似。
在静态属性上使用 abstract 修饰符是错误的。
通过包含使用 override 修饰符的属性声明,可在派生类中重写抽象继承属性。
抽象类必须为所有接口成员提供实现。
实现接口的抽象类有可能将接口方法映射到抽象方法上。 例如:
interface IHovertree
{
void M();
}
abstract class C : IHovertree
{
public abstract void M();
}
问答:
非抽象类中是否可以有抽象方法?答案:不可以。抽象方法只能在抽象类中定义。
抽象方法是否可以是私有的(private)?答案:不可以。抽象方法可以是公开的(public)或者受保护的(protected).