這個題目起的還是有點不合適,但是當你看到下面的**就會明白我在搞些什麼名堂,其實質是辨析了一下virtual關鍵字和override關鍵字,md寫的**,部分語言輸入法相容性問題,搞的我只能用用英文注釋,破鍵盤這兩也讓我敲壞了很多鍵都按下了不起作用了,無奈啊。。。。下面我按我的理解簡單的介紹一下虛方法和重寫方法。
虛方法:這個方法其實就是為了重寫方法而存在的(在宣告中包含virtual關鍵字),否則哪,我也沒感覺它存在的意義。
其一:因為要重寫所以它的訪問型別如果為private則毫無意義阻礙了重寫動作的進行也就是它不能私有化,所以c#中virtual關鍵字和private關鍵字不能同時使用。
其二:因為靜態的方法和抽象方法不能重寫,同理c#中static,abstract關鍵字和virtual關鍵字不能同時使用。
其三:不能在宣告虛方法的同時指定重寫虛方法,因為重寫方法只能重寫基類的虛方法,也就是要提前在基類中宣告虛方法,所以virtual關鍵字和override關鍵字不能同時使用。
重寫方法:就是使從基類繼承的虛方法提供新的實現(使用關鍵字override宣告),從而為其子類所專有化。
同上面的思路一樣:因為靜態的方法和抽象方法不能重寫,同理c#中static,abstract,new關鍵字和override關鍵字不能同時使用。
今天徹底的實驗了一下,總結用法如下:
非虛方法的實現(全部隱藏的虛方法)最初宣告的是什麼類的方法就永遠是什麼類的方法。
虛方法的實現:最終是什麼型別的方法就呼叫該型別的方法。
(含有隱藏的)虛方法的實現:最終是什麼型別的方法就呼叫(最靠近)該型別的方法。
直接上**,看看就明白了我總結的用法了。
using
system;
namespace
hidetest
//非虛方法
public
virtual
void
f()//虛方法
public
virtual
void
d()//虛方法
public
virtual
void
e()}
class
grandfather
:great_grandfather
public
void
show()
newpublic
virtual
void
f()public
override
void
d()public
override
void
e()}
class
father_1
:grandfather
newpublic
virtual
void
f()new
public
virtual
void
d()//hide the base class methods, redefined a new method.
public
override
void
e()}
class
father_2
:grandfather
}class
child
:father_1
newpublic
virtual
void
f()public
override
void
d()public
override
void
e()}
class
test}}
虛方法和重寫方法的繼承特性
這個題目起的還是有點不合適,但是當你看到下面的 就會明白我在搞些什麼名堂,其實質是辨析了一下virtual關鍵字和override關鍵字,md寫的 部分語言輸入法相容性問題,搞的我只能用用英文注釋,破鍵盤這兩也讓我敲壞了很多鍵都按下了不起作用了,無奈啊。下面我按我的理解簡單的介紹一下虛方法和重寫方法...
2014 03 16 虛方法和重寫方法
物件導向程式設計的三大特徵之一 多型,而實現多型的乙個主要表現形式就是子類重寫基類的虛方法或函式成員。虛方法 關鍵字 virtual 虛方法的訪問修飾符不能是私有的,否則子類無法繼承和重寫 重寫方法 關鍵字 override 重寫基類的虛方法時,訪問修飾符需要和基類虛方法保持一致 重寫和過載的區別 ...
虛方法 重寫方法和抽象方法
若乙個例項方法的宣告中含有 virtual 修飾符,則稱該方法為虛方法 virtual method 若其中沒有 virtual 修飾符,則稱該方法為非虛方法 non virtual method 在呼叫乙個虛方法時,該呼叫所涉及的那個例項的執行時型別 runtime type 確定要呼叫該方法的哪...