C#抽象类

来源:互联网 发布:mac页面放大缩小快捷键 编辑:程序博客网 时间:2024/05/19 03:25

    

可以将类声明为抽象类。方法是在类定义中将关键字 abstract 置于关键字 class 的前面。例如:

public abstract class A

{

    // Class members here.

}

抽象类不能实例化。抽象类的用途是提供多个派生类可共享的基类的公共定义。例如,类库可以定义一个作为其多个函数的参数的抽象类,并要求程序员使用该库通过创建派生类来提供自己的类实现。

    抽象类也可以定义抽象方法。方法是将关键字 abstract 添加到方法的返回类型的前面。例如:

public abstract class A

{

    public abstract void DoWork(int i);

}

抽象方法没有实现,所以方法定义后面是分号,而不是常规的方法块。抽象类的派生类必须实现所有抽象方法。当抽象类从基类继承虚方法时,抽象类可以使用抽象方法重写该虚方法。例如:

// 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.

    }

}

如果将虚方法声明为抽象方法,则它对于从抽象类继承的所有类而言仍然是虚的。继承抽象方法的类无法访问该方法的原始实现。在前面的示例中,类 F 上的 DoWork 无法调用类 D 上的 DoWork。在此情况下,抽象类可以强制派生类为虚方法提供新的方法实现。

       使用抽象类还要记住二点,一:因为抽象类中有可能存在抽象方法,也就是存在没有实现的方法,所以抽象类无法被实例化,也就是无法创建类的实例对象;二:定义抽象方法的时候,为了让继承的子类能够实现这个抽象方法,也就必须把抽象的方法定义成公有成员,这样在抽象类的外部才能访问到这个抽象方法。