首先在c#中虛方法的定義:
public virtual void virtualmethod();
只要在方法名前加上virtual,就宣告了該方法為虛方法,注意宣告為虛方法後再不能加上abstract,static關鍵字宣告
以下是插入乙個例項來說明虛方法與非虛方法的不同
public class a
public void normalmethod()
}public class b : a
public new void normalmethod()
}在main函式中執行:
b b = new b();
a a = b;//將派生類的例項賦給基類的物件
a.virmethod();
a.normalmethod();
b.virmethod();
b.normalmethod();
console.readkey();
執行結果:virtual method b
normal method a
virtual method b
normal method b
通過結果表示 a.virmethod() 虛方法是執行了b類的重寫的方法;
a.normalmethod();非虛方法還是執行了a類本身的方法;
a a = b 這步操作是通過派生類的例項來構造基類的物件,基類指標實際上是指向派生類的物件;所以a.virmethod()這一步呼叫的是派生類重寫了的方法。
而a.normalmethod() 還是呼叫基類的方法
(在這裡插下:override是重寫了基類的虛方法,new 是新建立乙個方法,就是與基類同名而已,但還是子類的自已的方法)
override是過載(有的翻譯為覆蓋),new是隱藏。
再補充一下:a a = b; 其中a是宣告類,b是例項類
在呼叫函式的時候,系統是先去看宣告類,如果函式不是虛函式,就直接呼叫宣告類的,如果是虛函式,它會轉去檢查物件的例項類.(個人覺得挺有道理的)
如果繼承是物件導向設計理論的基石,那麼抽象理論和方法就是繼承理論的頂梁柱。在漢語詞典中抽象是這樣解釋的:將幾個有區別的物體的共同特性或形象抽取出來或孤立地進行考慮的行動或過程。可以看出,抽象就是從事物中提取特徵和性質,並不是事物本身。具體應該如何理解呢?
大家都知道,學生有乙個共同的特徵是必須學習,那麼學什麼,如何學,每乙個學生就不一樣了。這樣可以提取學習這個動作為抽象方法,而不考慮具體內容。動物類都有叫的動作,具體動物如何叫,暫不考慮,先把共性提取出來。簡單地說,用來描述這些共性的類就是抽象類,抽象類中不考慮具體實現,只確定必須具有的行為,就是抽象方法。
抽象方法是乙個沒有實現的方法,使用關鍵字abstract定義抽象方法。語法如下:
《訪問修飾符》 abstract 返回型別 方法();
例如:public abstract void cry();
當乙個例項方法宣告中含有abstract修飾符時,稱之為抽象方法(abstract methods)。抽象方法只允許在抽象類中宣告,但是並不能實現,抽象方法宣告中只包含方法的簽名,抽象方法在其派生類中使用override關鍵字來重寫。在抽象方法宣告中,不允許出現static、virtual或override中的任一修飾符。
注意:和普通方法不同,抽象方法沒有閉合大括號,在方法括號後面直接加「;」號,表明抽象方法中沒有方法體,即沒有具體的實現。
C 虛方法和抽象方法
虛方法 1 virtual方法表示此方法可以被重寫,也就是說這個方法具有多型.父類中的方法是通用方法,可以在子類中重寫以重新規定方法邏輯.2 virtual方法可以直接使用,和普通方法一樣 3 不是必須重寫的.子類可以使用base.方法 的方式呼叫,無論有沒有在子類使用override去重寫 vir...
C 虛方法和抽象方法
虛方法 1 virtual方法表示此方法可以被重寫,也就是說這個方法具有多型.父類中的方法是通用方法,可以在子類中重寫以重新規定方法邏輯.2 virtual方法可以直接使用,和普通方法一樣 3 不是必須重寫的.子類可以使用base.方法 的方式呼叫,無論有沒有在子類使用override去重寫 vir...
C 抽象方法 vs 虛方法
虛方法和抽象方法都可以供派生類重寫,它們之間有什麼區別呢?1.虛方法必須有實現部分,抽象方法沒有提供實現部分,抽象方法是一種強制派生類覆蓋的方法,否則派生類將不能被例項化。如 抽象方法 public abstract class animal 虛方法 public class animal publ...