查看文章 |
抽象方法必须包含于抽象类里,抽象类可以包含非抽象的方法。 abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中使用 abstract 修饰符以指示某个类只能是其他类的基类。标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。 在此例中,类
有关抽象类的更多信息,请参见抽象类、密封类及类成员(C# 编程指南)。
| |||||||||||||||||||
复制代码 |
|
|---|---|
public abstract void MyMethod(); |
|
实现由一个重写方法提供,此重写方法是非抽象类的成员。
除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样。
-
在静态属性上使用 abstract 修饰符是错误的。
-
在派生类中,通过包括使用 override 修饰符的属性声明,可以重写抽象的继承属性。
抽象类必须为所有接口成员提供实现。
实现接口的抽象类可以将接口方法映射到抽象方法上。例如:
复制代码 |
|
|---|---|
interface I
{
void M();
}
abstract class C: I
{
public abstract void M();
}
|
|
示例
在本例中,DerivedClass 类是从抽象类 BaseClass 派生的。抽象类包含一个抽象方法 AbstractMethod 和两个抽象属性 X 和 Y。
复制代码 |
|
|---|---|
// abstract_keyword.cs
// Abstract Classes
using System;
abstract class BaseClass // Abstract class
{
protected int _x = 100;
protected int _y = 150;
public abstract void AbstractMethod(); // Abstract method
public abstract int X { get; }
public abstract int Y { get; }
}
class DerivedClass : BaseClass
{
public override void AbstractMethod()
{
_x++;
_y++;
}
public override int X // overriding property
{
get
{
return _x + 10;
}
}
public override int Y // overriding property
{
get
{
return _y + 10;
}
}
static void Main()
{
DerivedClass o = new DerivedClass();
o.AbstractMethod();
Console.WriteLine("x = {0}, y = {1}", o.X, o.Y);
}
}
|
|
输出
x = 111, y = 161 |
|
注释
在上面的示例中,如果试图通过使用下面的语句
BaseClass bc = new BaseClass(); // Error将出现错误,指出编译器无法创建抽象类“BaseClass”的实例。

复制代码