我正在以下编译器警告:

'Resources.Foo.GetType()' hides inherited member 'object.GetType()'. Use the new keyword if hiding was intended.    Resources.NET\Resources\Class1.cs   123 20  Resources

该(非常简化的)代码:

public interface IFoo
{
    int GetType();
    string GetDisplayName();
}

public class Foo : IFoo
{
    public int GetType() { return 3; }   *** Warning: points to here (line 123)***
    public string GetDisplayName() { return "Foo"; }
}

请注意,我不明白的是为什么GetDisplayName()函数没有得到一个警告。我清楚地忽视的东西。

我也戳周围堆栈溢出和Google搜索这个错误,它似乎适用于类继承,没有接口。我真搞不清楚为什么会被触发接口(其中它的方法定义为虚拟)。

预先感谢的洞察力。

有帮助吗?

解决方案

的GetType 方法所定义的 System.Object的类,它是最终的基类的框架的所有类的。

此方法被用来获得的类型在运行当前情况下,我认为你是不打算重写它(你有一个int返回类型)。

我建议你把它改名为GetFooType方法或别的东西,或者实现你的界面的明确以避免运行时问题。

其他提示

它指的是你的方法隐藏 GetType 从对象,而不是从你的界面。由于类继承的对象并实现IFoo,并都提供了GetType方法,通过的隐含的实施,你会隐藏对象继承了GetType接口。如果你仍然想你的接口方法被调用GetType,可以实现它的明确的而不是Foo

int IFoo.GetType()
{
    return 3;
}

在.NET所有类型从System.Object派生。

System.Object的已经定义了一个名为的GetType方法。如果您在类中定义的另一种方法“的GetType”,如果有人创建你的类的对象,他们永远不能调用GetType方法通过System.Object的提供。这就是你所得到的警告“的GetType”隐藏在System.Object的定义的方法的原因。因为System.Object的(或任何与此有关的父类)没有定义这个方法,你没有得到这个预警GetDisplayName。

我会建议你改变你的方法名别的东西作为一般的.NET开发人员所希望的GetType方法调用指System.Object的实现。

这不是抱怨你的接口的实现,而是你的GetType(重新实现的),这已经是“对象”上 - 从富自动继承。 “对象”没有一个GetDisplayName方法,因此没有提出投诉的那一个。尝试重命名方法或“新”的修改添加,如果你真的想隐藏object.GetType()虽然不推荐。

System.Object类已经具有对GetType()方法

应该使用新的或override关键字来解决这个问题

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top