Abstract和Virtual

在C#的学习中,容易混淆virtual方法和abstract方法的使用,现在来讨论一下二者的区别。

 

它们有一个共同点:

二者都是用来修饰父类的,只能作为基类使用,通过覆盖父类的定义,让子类与override的配合重新定义。

如果用来修饰方法,前面必须添加public。毕竟加上virtual或abstract就是让子类重新定义的,而private成员是不能被子类访问的。


virtual是“虚拟的”,abstract是“抽象的"

 

abstract可以修饰类和方法。

virtual在C#中用于修饰方法和属性。

 

abstract修饰的类叫做抽象类,抽象类不能实例化。

抽象类的构造函数只能在其子类的构造函数中调用,不管是否是抽象类,无参构造自动调用,带参数的构造函数必须显式调用

abstract修饰的方法不能有实现体,相当于纯虚函数

如,

public abstract Light {

    public  void  turnon()

    {

        ...

    }

    public abstract  void  turnoff();

};

抽象方法只能在抽象类中,如果类成员被abstract修饰,则该类前必须添加abstract。

子类如果不是abstract,则其中一定要有抽象方法的具体实现。

如果子类没有实现抽象基类中所有的抽象方法,则子类也必须定义成一个抽象类。

virtual 修饰的方法可以在一般类中。

其修饰的方法在父类中一定要有实现,即使只是一对大括号。

public  Light {

public  virtual  void  turnon() {};

};

原文地址:https://www.cnblogs.com/sylone/p/6098013.html