111

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

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

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

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

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

4

4 回答 4

159

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

public new EventsDataTable Events
{
  ..
}

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

于 2013-10-05T04:06:46.837 回答
13

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

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

new void Update()
{
  //do stufff
}

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

于 2015-03-22T18:46:57.813 回答
10

在下面的代码中,Class A实现了接口IShow并实现了它的方法ShowDataClass B继承Class A. 为了使用ShowData方法Class B,我们必须newShowData方法中使用关键字来隐藏基类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");
    }
}
于 2017-12-20T11:56:10.100 回答
0

父函数需要virtual关键字,子函数需要override函数定义前面的关键字。

于 2020-03-26T17:41:07.967 回答