將不(bu)確定變成確定~類中(zhong)的override
說到override大家都知道,它是復(fu)寫,子類去復(fu)寫父類的方法(fa)與屬(shu)性(xing),是,沒錯,今(jin)天主要(yao)就說這個復(fu)寫,如果(guo)不復(fu)寫會有(you)什么結果(guo),有(you)沒有(you)想(xiang)過,呵呵
來和我做個demo吧!
1 abstract class Parent 2 { 3 public virtual string Msg { get; set; } 4 } 5 6 7 class Sub : Parent 8 { 9 public override string Msg { get; set; } 10 11 }
在另外一個類中為sub這個屬性賦值,返回值為它的基類parent
static Parent display_message { get { return new Sub { Msg = "ok" }; } }
最(zui)后輸出這個Parent類型的屬性display_message ,結果是:
沒有問題,在給子類(lei)賦值(zhi)時,父(fu)類(lei)的屬(shu)性也被賦上了,試想一下,如果我(wo)們偏(pian)不用override復寫,直接用與主類(lei)同名(ming)的屬(shu)性呢(ni)
1 class Sub : Parent 2 { 3 public string Msg { get; set; } 4 5 }
編譯不會出錯,但VS會把它當成是一種警告
意思是說,如果(guo)是不希望(wang)保留(liu)基(ji)類的(de)同名屬性,請你用new關鍵進行(xing)說明一下,也好叫我知(zhi)道呀,呵呵。
當(dang)然(ran),運行的結果就是(shi)基類的Msg屬性被覆蓋了,如果就是(shi):
呵呵,有時(shi)我們(men)模棱兩可的東西可能(neng)成為(wei)一個(ge)代碼,一個(ge)程(cheng)序,甚至一個(ge)項目失(shi)敗的原因之一,所以請把(ba)不(bu)確定(ding)變成確定(ding)吧!