“如果隐藏意图,请使用新关键字”警告

时间:2013-10-05 04:03:02

标签: c# winforms

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

  

警告1'WindowsFormsApplication2.EventControlDataSet.Events'隐藏   继承的成员   'System.ComponentModel.MarshalByValueComponent.Events'。使用新的   关键字,如果隐藏意图。 C:\用户\我的电脑\桌面\事件   Control \ WindowsFormsApplication2 \ EventControlDataSet.Designer.cs 112 32 eventControl

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

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

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

4 个答案:

答案 0 :(得分:122)

您的类有一个基类,并且此基类还有一个名为Events的属性(非虚拟或抽象),您的类会覆盖它。如果您打算覆盖它,请在public修饰符后添加“new”关键字。 E.G。

public new EventsDataTable Events
{
  ..
}

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

答案 1 :(得分:13)

@wdavo是对的。功能也是如此。

如果覆盖基本功能,例如Update,那么在您的子类中,您需要:

new void Update()
{
  //do stufff
}

如果在函数decleration开始时没有new,你将获得警告标志。

答案 2 :(得分:3)

在下面的代码中,Class A实现了接口IShow并实现了其方法ShowDataClass B继承Class A。要在ShowData中使用Class B方法,我们必须在new方法中使用关键字ShowData才能隐藏基类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");
    }
}

答案 3 :(得分:0)

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