并继承真的隐藏的方法呢?
-
18-09-2019 - |
题
我正在以下编译器警告:
'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关键字来解决这个问题