C#基礎-方法的重寫(new)和覆蓋(override)


最近又再看基礎知識了。

看到方法的重寫(new)和覆蓋(override)的時候有點不太懂。

於是百度之。

那答案啊。。。。。

要么就是把覆蓋(override)和重載(overload)混淆了。

要么就是把重寫(new)和覆蓋(override)說反了。

最后不得已谷歌之。

在stackoverflow里看到一個比較好的答案:

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

virtual: indicates that a function may be overriden by an inheritor

override: overrides the functionality of a virtual function in a base class, providing different functionality.

newhides the original function (which doesn't have to be virtual), providing different functionality. This should only be used where it is absolutely necessary.

When you hide a method, you can still access the original method by up casting to the base class. This is useful in some scenarios, but dangerous.

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

翻譯過來就是(翻譯不對的地方請指正,tks):

override(覆蓋):

virtual:表示這個方法也許會被繼承者(子方法)覆蓋(override)

override:覆蓋基類中的虛方法,提供不同的實現方法

 

new(重寫) :

隱藏原始方法(不必是虛方法),提供不同的實現方法。這個(重寫)應該僅用於必須要用的地方(也就是一般地方不推薦使用)。

當你隱藏一個方法,你仍然可以訪問原始方法通過指向基類。這在一些場景中很有用,但是比較危險。

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

所以呢,

override一般是拓展原始虛方法,原始方法必須要加上virtual修飾符。

new 一般是用來拓展原始虛方法,但是不推薦使用。

 

個人理解,如有不正,不吝賜教!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM