1. --抽象类不能实例化 --抽象类可以包含抽象方法和抽象访问器(如抽象属性)。 --抽象类可以有构造函数(没有抽象构造函数,抽象静态方法) --抽象类可以有字段 抽象类的用途是提供多个派生类可共享的基类的公共定义。例如,类库可以定义一个作为其多个函数的参数的抽象类,并要求程序员使用该库通过创建派生类来提供自己的类实现。 如果希望禁止通过 new 关键字直接进行实例化,可以将类声明为 abstract。如果这样做,则仅当从该类派生新类时才能使用该类。 - 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; }
- }
复制代码
2.--抽象方法没有实现(所以方法定义后面是分号,而不是常规的方法块) --如果某个类包含抽象成员,则该类自身必须声明为抽象类 --在抽象方法声明中使用 static 或 virtual 修饰符是错误的(抽象方法是隐式的虚方法, 在静态属性上使用 abstract 修饰符是错误的) --不要在抽象类型中定义公共的(public)或受保护的内部(protected internal)构造函数。应在抽象类中定义一个受保护构造函数(protected)或内部构造函数(internal)。(具有 public 或 protected internal 可见性的构造函数用于能进行实例化的类型。任何情况下抽象类型都不能实例化) - public abstract class A
- {
- public abstract void DoWork(int i);
- }
复制代码
3.--抽象类的派生类必须实现所有抽象方法。 --实现由一个重写方法override提供,此重写方法是非抽象类的一个成员。 - abstract class WashingMachine
- {
- protected WashingMachine()//构造函数
- {
- // Code to initialize the class goes here.
- }
-
- abstract public void Wash();
- abstract public void Rinse(int loadSize);
- abstract public long Spin(int speed);
- }
复制代码
在上面的示例中,用一个已实现的方法和三个未实现的方法声明抽象类。从该类继承的类必须实现 Wash、Rinse 和 Spin 方法。下例显示了该类实现的可能形式: - class MyWashingMachine : WashingMachine
- {
- public MyWashingMachine()
- {
- // Initialization code goes here.
- }
- override public void Wash()
- {
- // Wash code goes here.
- }
- override public void Rinse(int loadSize)
- {
- // Rinse code goes here.
- }
- override public long Spin(int speed)
- {
- // Spin code goes here.
- }
- }
复制代码
4.当抽象类从基类继承虚方法时,抽象类可以使用抽象方法重写该虚方法。 - // compile with: /target:library
- public class D
- {
- public virtual void DoWork(int i)
- {
- // Original implementation.
- }
- }
-
- public abstract class E : D
- {
- public abstract override void DoWork(int i);
- }
-
- public class F : E
- {
- public override void DoWork(int i)
- {
- // New implementation.
- }
- }
复制代码
如果将virtual方法声明为abstract,则该方法对于从抽象类继承的所有类而言仍然是虚方法。继承抽象方法的类无法访问该方法的原始实现。在前面的示例中,类 F 上的 DoWork 无法调用类 D 上的 DoWork。在此情况下,抽象类可以强制派生类为虚方法提供新的方法实现。 5.抽象类必须为所有接口成员提供实现。实现接口的抽象类可以将接口方法映射到抽象方法上。 - interface I
- {
- void M();
- }
- abstract class C : I
- {
- public abstract void M();
- }
复制代码
|