歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C#之virtual 和abstract

C#之virtual 和abstract

日期:2017/3/1 9:48:55   编辑:Linux編程

前幾天看到文哲的博客中有一個關於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