Virtual方法(虛方法) Virtual方法(虛方法) virtual 關鍵字用於在基類中修飾方法。virtual的使用會有兩種情況: 情況1:在基類中定義了virtual方法,但在派生類中沒有重寫該虛方法。那麼在對派生類實例的調用中,該虛方法使用的是基類定義的方法。 情況2:在基類中定義了vi ...
-
Virtual方法(虛方法)
virtual 關鍵字用於在基類中修飾方法。virtual的使用會有兩種情況:
情況1:在基類中定義了virtual方法,但在派生類中沒有重寫該虛方法。那麼在對派生類實例的調用中,該虛方法使用的是基類定義的方法。
情況2:在基類中定義了virtual方法,然後在派生類中使用override重寫該方法。那麼在對派生類實例的調用中,該虛方法使用的是派生重寫的方法。
-
Abstract方法(抽象方法)
abstract關鍵字只能用在抽象類中修飾方法,並且沒有具體的實現。抽象方法的實現必須在派生類中使用override關鍵字來實現。
介面和抽象類最本質的區別:抽象類是一個不完全的類,是對對象的抽象,而介面是一種行為規範。
Static:當一個方法被聲明為Static時,這個方法是一個靜態方法,編譯器會在編譯時保留這個方法的實現。也就是說,這個方法屬於類,但是不屬於任何成員,不管這個類的實例是否存在,它們都會存在。就像入口函數Static void Main,因為它是靜態函數,所以可以直接被調用。
Virtual:當一個方法被聲明為Virtual 時,它是一個虛擬方法,直到你使用ClassName variable = new ClassName();聲明一個類的實例之前,它都不存在於真實的記憶體空間中。這個關鍵字在類的繼承中非常常用,用來提供類方法的多態性支持。
overrride:表示重寫 這個類是繼承於Shape類。
virtual,abstract是告訴其它想繼承於他的類 你可以重寫我的這個方法或屬性,否則不允許。
abstract:抽象方法聲明使用,是必須被派生類覆寫的方法,抽象類就是用來被繼承的;可以看成是沒有實現體的虛方法;如果類中包含抽象方法,那麼類就必須定義為抽象類,不論是否還包含其他一般方法;抽象類不能有實體的。
a) virtual修飾的方法必須有方法實現(哪怕只有一對大括弧),abstract修飾的方法不能有實現。
b) virtual可以被子類重寫,abstract必須被子類重寫。
c) 如果類中的某一函數被abstact修飾,則類名也必須用abstact修飾。
d) Abstract修飾的類不能被創建實例。
e) C#中如果準備在子類重寫父類的方法,則該方法在父類中必須用virtual修飾,在子類中必須用overide修飾,避免了程式員在子類中不小心重寫了父類父類方法。
註:用abstract修飾的類只能被繼承不能夠被實例化。
virtual和abstract都是用來修飾父類的,通過覆蓋父類的定義,讓子類重新定義。
它們有一個共同點:如果用來修飾方法,前面必須添加public,要不然就會出現編譯錯誤:虛擬方法或抽象方法是不能私有的。畢竟加上virtual或abstract就是讓子類重新定義的,而private成員是不能被子類訪問的。
但是它們的區別很大。(virtual是“虛擬的”,abstract是“抽象的").
參考 https://www.cnblogs.com/lvjy-net/p/8467170.html