【问题标题】:"Use the new keyword if hiding was intended" warning“如果打算隐藏,请使用新关键字”警告
【发布时间】:2013-10-12 04:41:35
【问题描述】:

我的屏幕底部有一条警告:

警告 1 'WindowsFormsApplication2.EventControlDataSet.Events' 隐藏 继承成员 'System.ComponentModel.MarshalByValueComponent.Events'。使用新的 如果打算隐藏,则使用关键字。 C:\Users\myComputer\Desktop\Event Control\WindowsFormsApplication2\EventControlDataSet.Designer.cs 112 32 eventControl

如果我双击它,它会出现:

public EventsDataTable Events {
    get {
        return this.tableEvents;
    }

谁能告诉我如何摆脱这个?

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    父函数需要virtual关键字,子函数需要在函数定义前加上override关键字。

    【讨论】:

      【解决方案2】:

      在下面的代码中,Class A 实现了接口IShow 并实现了它的方法ShowDataClass B 继承 Class A。为了在Class B中使用ShowData方法,我们必须在ShowData方法中使用关键字new来隐藏基类Class A方法并使用override关键字来扩展方法.

      interface IShow
      {
          protected void ShowData();
      }
      
      class A : IShow
      {
          protected void ShowData()
          {
              Console.WriteLine("This is Class A");
          }
      }
      
      class B : A
      {
          protected new void ShowData()
          {
              Console.WriteLine("This is Class B");
          }
      }
      

      【讨论】:

      • 根据您的说明,您的示例中没有 override 并且不需要 override
      • 我认为你的例子是正确的,但不完整。你的解释也不清楚。你能把你的答案编辑成更像dotnetfiddle.net/Iw0OzB吗?如果不是,我可能会将我的小提琴作为另一个答案发布
      【解决方案3】:

      @wdavo 是正确的。函数也是如此。

      如果你重写了一个基本函数,比如 Update,那么在你的子类中你需要:

      new void Update()
      {
        //do stufff
      }
      

      如果函数 declaration 开始时没有 new,您将收到警告标志。

      【讨论】:

      • 使用'new'关键字的目的是什么,因为即使不使用'new'关键字,结果也是一样的,即不调用基类方法实现。
      【解决方案4】:

      你的类有一个基类,这个基类还有一个属性(不是虚拟的或抽象的),称为事件,它被你的类覆盖。如果您打算覆盖它,请将“new”关键字放在 public 修饰符之后。例如

      public new EventsDataTable Events
      {
        ..
      }
      

      如果您不想覆盖它,请将您的属性名称更改为其他名称。

      【讨论】:

      • Here is a link 适用于任何想知道 new 和 override 之间的区别的人。
      • new 关键字会消除编译错误,但可能会引入其他意外行为。我认为您应该在答案中添加警告。这将有助于理解添加 new 的后果。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多