virtual表示虛擬的含義但在c#中預設的成員是非虛擬的,通常將類中的成員定義為虛擬的,表示這些成員在繼承後 可以被重寫其中的內容
virtual關鍵字可以修飾方法、屬性、索引器 以及事件等用到父類的成員中
使用virtual 關鍵字修飾屬性和方法的語法形式如下
//修飾屬性
public virtual 資料型別 屬性名
//修飾方法
訪問修飾符 virtual 返回值型別方法
例子:class person
}class student:person
}class teacher:person
}但對於以上** 需要消除**冗餘,在這使用base 關鍵字呼叫父類的print方法。
例子:class student:person
}class teacher:person}
方法隱藏和方法重寫 之間的區別
class program
}class a
}class b :a
}class c :a
}執行上面的**,效果如下圖所示。
從上面的執行效果可以看出,使用方法隱藏的方法呼叫的結果是父類 a 中 print 方法中的內容,而使用方法重寫的方法呼叫的結果是子類 c 中 print 方法中的內容。
因此方法隱藏相當於在子類中定義新方法,而方法重寫則是重新定義父類中方法的內容。
從上面的**也可以看出,在「a a1=new b()」語句中 a 類是父類、b 類是子類,相當於將子類轉換成父類,即隱式轉換。
如果需要將父類轉換成子類,則需要強制轉換,並且在強制轉換前需要先將所需的子類轉換成父類,示例**如下。
a a2=new c();
c c=(c) a2;
c.print();
在上面的例項中,a2 是父類物件,然後將其強制轉換成 c 類物件。
object 類中的 tostring 方法能被類重寫,並返回所需的字串,通常將其用到類中返回類中屬性的值。
在 student 類中新增重寫的 tostring 方法,**如下。
class student
public string grade
public void print()
public override string tostring()
}這樣,在呼叫 student 類中的 tostring 方法時即可獲取專業和年級的值。
此外,除了 tostring 方法,在類中也可以重寫 equals 方法、gethashcode 方法。
C 中virtual(虛函式)的用法
在物件導向的c 語言中,虛函式 virtual function 是乙個非常重要的概念。因為它充分體現了物件導向思想中的繼承和多型性這兩大特性,在c 語言裡應用極廣。比如在微軟的mfc類庫中,你會發現很多函式都有virtual關鍵字,也就是說,它們都是虛函式。難怪有人甚至稱虛函式是c 語言的精髓。那...
C 中virtual的三種用法
virtual用法一 includeusing namespace std class a int main int argc,char argv 這段 列印出的結果為b,但是當把a類中的virtual去掉之後列印出的就為a。當基類中沒有virtual的時候,編譯器在編譯的時候把p看做a類的物件,呼...
C 中virtual(虛函式)的用法 詳解
在物件導向的c 語言中,虛函式 virtual function 是乙個非常重要的概念。虛函式是指乙個類中你希望過載的成員函式 當你用乙個 基類指標或引用 指向乙個繼承類物件的時候,呼叫乙個虛函式時,實際呼叫的是繼承類的版本。摘自msdn 舉例 include using namespace std...