C#基础-方法的重写(new)和覆盖(override)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#基础-方法的重写(new)和覆盖(override)相关的知识,希望对你有一定的参考价值。
最近又再看基础知识了。
看到方法的重写(new)和覆盖(override)的时候有点不太懂。
于是百度之。
那答案啊。。。。。
要么就是把覆盖(override)和重载(overlord)混淆了。
要么就是把重写(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.
new: hides 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 一般是用来拓展原始非虚方法,但是不推荐使用。
个人理解,如有不正,不吝赐教!
以上是关于C#基础-方法的重写(new)和覆盖(override)的主要内容,如果未能解决你的问题,请参考以下文章