为了账号安全,请及时绑定邮箱和手机立即绑定

C#-关键字使用虚拟+重写与新建

C#-关键字使用虚拟+重写与新建

qq_遁去的一_1 2019-06-26 15:57:26
C#-关键字使用虚拟+重写与新建在基类型中声明方法之间有什么区别“virtual“然后使用override关键字,而不是简单地使用new“在子类型中声明匹配方法时使用关键字?
查看完整描述

3 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

“new”关键字不覆盖,它表示与基类方法无关的新方法。

public class Foo{
     public bool DoSomething() { return false; }}public class Bar : Foo{
     public new bool DoSomething() { return true; }}public class Test{
    public static void Main ()
    {
        Foo test = new Bar ();
        Console.WriteLine (test.DoSomething ());
    }}

此打印为false,如果使用覆盖,则会打印true。

(基本代码取自Joseph Daigle)

所以,如果你做的是真正的多态应该总是覆盖..唯一需要使用“New”的地方是方法与基类版本没有任何关联时。


查看完整回答
反对 回复 2019-06-26
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

我总是发现这样的事情用图片更容易理解:

再一次,取约瑟夫·戴格尔的密码,

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/overridenew在声明你的课程时。


查看完整回答
反对 回复 2019-06-26
  • 3 回答
  • 0 关注
  • 478 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信