C#既然有virual和override,那還要new有什么用呢?
按照視頻老師所說的依賴倒置原則。程序涉及要依賴于抽象類(父類),而不依賴于具體類(子類)。這樣做的一個好處就是程序具有很大的可擴展性。
那直接通過父類建立,然后需要的話用virtual和override不就可以了?那通過子類建立來隱藏父類方法的new豈不是意義不大?有什么不可取代的原因嗎?
按照視頻老師所說的依賴倒置原則。程序涉及要依賴于抽象類(父類),而不依賴于具體類(子類)。這樣做的一個好處就是程序具有很大的可擴展性。
那直接通過父類建立,然后需要的話用virtual和override不就可以了?那通過子類建立來隱藏父類方法的new豈不是意義不大?有什么不可取代的原因嗎?
2017-05-17
舉報
2018-08-15
你可以去看一下老師第二課的代碼,你會發(fā)現(xiàn)老師實例化的時候是
這個時候就是new,它的引用是派生類的,你引用了之后本來應該使用基類的那個方法,可是在運行的時候派生類用自己的new過的方法把那個替換了;
但是如果是使用虛方法,那么實例化的時候引用就是基類;只不過在運行的時候如果發(fā)現(xiàn)實例化的new后面的類型里面有一個override一個virtual的方法,就會去調(diào)用那個方法,而不是基類的。不過說到底作為一個初學者我也不知道有什么不可取代的地方~
2018-07-25
根據(jù)依賴倒置原則,在主程序中調(diào)用方法一般用基類來調(diào)用,如Pet.Speak(),而不用Dog.Speak,當在基類的方法聲明為Virtual虛方法后,調(diào)用時會檢驗基類所指向的派生類的方法是否被override重寫,如果被重寫則調(diào)用的是重寫后的方法;使用new隱藏方法時,時在派生類中的方法用new聲明。
2018-06-20
這個是設計原則,要盡量依賴基類,這就是多態(tài)。
設計成多態(tài),就要用override。
單單使用繼承重寫方法,就用new。
就結(jié)果而言應該一樣的。但是實例化的類不一樣,override是實例了基類,new實例了子類。
使用override可以降低程序耦合,更加推薦啊。
2017-05-26
new 用來隱藏基類中的方法,只有通過派生類本身類的引用才能調(diào)用出。
override 用來重寫基類中的方法,通過基類調(diào)用出的是派生類重寫后的方法??梢詫崿F(xiàn)多態(tài)。
2017-05-17
new用來實例化一個類,作用對像是類.Override是重寫,作用對像是變量或方法,在繼承一個父類的情況下才有意義,將覆蓋父類中的變量或方法.