歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> 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)如果類中包含抽象方法,則該類就必須定義成抽象類

Copyright © Linux教程網 All Rights Reserved