在基类型中声明方法有什么区别“virtual
”,然后使用“在子类型中覆盖它override
" 关键字而不是简单地使用 "new
" 子类型中声明匹配方法时的关键字?
我总是发现这样的事情用图片更容易理解:
再次,采用约瑟夫·戴格尔的代码,
public class Foo
{
public /*virtual*/ bool DoSomething() { return false; }
}
public class Bar : Foo
{
public /*override or new*/ bool DoSomething() { return true; }
}
如果您随后像这样调用代码:
Foo a = new Bar();
a.DoSomething();
注意:重要的是我们的对象实际上是一个Bar
,但我们是将其存储在类型变量中Foo
(这与铸造类似)
那么结果会如下,取决于你是否使用了virtual
/override
or new
当宣布你的班级时。
![Virtual/Override explanation image](https://i.stack.imgur.com/4NrQk.jpg)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)