亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

C#既然有virual和override,那還要new有什么用呢?

按照視頻老師所說的依賴倒置原則。程序涉及要依賴于抽象類(父類),而不依賴于具體類(子類)。這樣做的一個好處就是程序具有很大的可擴展性。

那直接通過父類建立,然后需要的話用virtual和override不就可以了?那通過子類建立來隱藏父類方法的new豈不是意義不大?有什么不可取代的原因嗎?

正在回答

5 回答

你可以去看一下老師第二課的代碼,你會發現老師實例化的時候是

Dog?dog=new?Dog();

這個時候就是new,它的引用是派生類的,你引用了之后本來應該使用基類的那個方法,可是在運行的時候派生類用自己的new過的方法把那個替換了;

但是如果是使用虛方法,那么實例化的時候引用就是基類;只不過在運行的時候如果發現實例化的new后面的類型里面有一個override一個virtual的方法,就會去調用那個方法,而不是基類的。不過說到底作為一個初學者我也不知道有什么不可取代的地方~

0 回復 有任何疑惑可以回復我~

根據依賴倒置原則,在主程序中調用方法一般用基類來調用,如Pet.Speak(),而不用Dog.Speak,當在基類的方法聲明為Virtual虛方法后,調用時會檢驗基類所指向的派生類的方法是否被override重寫,如果被重寫則調用的是重寫后的方法;使用new隱藏方法時,時在派生類中的方法用new聲明。

0 回復 有任何疑惑可以回復我~

這個是設計原則,要盡量依賴基類,這就是多態。

設計成多態,就要用override。

單單使用繼承重寫方法,就用new。

就結果而言應該一樣的。但是實例化的類不一樣,override是實例了基類,new實例了子類。

使用override可以降低程序耦合,更加推薦啊。

1 回復 有任何疑惑可以回復我~

new 用來隱藏基類中的方法,只有通過派生類本身類的引用才能調用出。

override 用來重寫基類中的方法,通過基類調用出的是派生類重寫后的方法??梢詫崿F多態。

2 回復 有任何疑惑可以回復我~

new用來實例化一個類,作用對像是類.Override是重寫,作用對像是變量或方法,在繼承一個父類的情況下才有意義,將覆蓋父類中的變量或方法.

0 回復 有任何疑惑可以回復我~
#1

Graphemer 提問者

我說的new指的是類里面同名隱藏父類方法的那個new 不是= new XX()的那個new
2017-05-17 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

C#既然有virual和override,那還要new有什么用呢?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號