Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / C#之virtual 和abstract

前几天看到文哲的博客中有一个关于virtual和 abstract的区别问题。可以说当时也是模棱两可,也不太确定具体有什么区别,今天查了查,稍微有点收获,希望对您有所帮助:1、先说虚方法 virtual虚方法有自己的函数体,已经提供了函数实现,但是允许在子类中重写或覆盖。重写的子类虚函数就是被覆盖了。下面就来具体举个例子来说明一下:首先建立父类Animal,其中包含虚方法 Shout()classAnimal
{
    public virtual string Shout()
    {
        return "动物";
    }
}
 //子类Dog继承父类Animal
classDog : Animal
{
}主函数中写如下程序:classProgram
{
    static void Main(string[] args)
    {
        Animal dog1 = new Dog();
        Console .WriteLine ( dog1.Shout());
    }
}得到的结果如下:如果将上面的子类Dog中复写父类中的方法Shout(),即将其改成下面的代码:classDog : Animal
{
    public override string Shout()
    {
        return "狗";
    }
}主函数不变,则其结果如下:
2、在看抽象abstract其分抽象类和抽象方法1)一般在类前面加上abstract就成抽象类了,抽象类其不能被实例化,就像抽象类Animal,其实例化的结果也没有任何意义;2)抽象方法和抽象类一样,在返回值前加abstract就成抽象方法了。抽象方法没有方法体,直接在括号后面加“;”即可。如下:abstract class Animal{protected abstract string getShoutSound();}3)抽象方法必须要被子类重写4)如果类中包含抽象方法,则该类就必须定义成抽象类