C# 继承真的隐藏了方法吗?

C# 继承真的隐藏了方法吗?,c#,inheritance,interface,method-hiding,C#,Inheritance,Interface,Method Hiding,我收到以下编译器警告: 'Resources.Foo.GetType()' hides inherited member 'object.GetType()'. Use the new keyword if hiding was intended. Resources.NET\Resources\Class1.cs 123 20 Resources 对于此(非常简化的)代码: 注意,我不明白的是为什么GetDisplayName()函数没有得到警告。我显然忽略了一些事情 我已经搜索

我收到以下编译器警告:

'Resources.Foo.GetType()' hides inherited member 'object.GetType()'. Use the new keyword if hiding was intended.    Resources.NET\Resources\Class1.cs   123 20  Resources
对于此(非常简化的)代码:

注意,我不明白的是为什么GetDisplayName()函数没有得到警告。我显然忽略了一些事情

我已经搜索了堆栈溢出并搜索了这个错误,它似乎适用于类继承,而不是接口。我真的很困惑,为什么会为接口触发这种情况(接口将其方法定义为虚拟的)

提前感谢您的洞察力。

该方法是在类上定义的,类是框架所有类的最终基类

此方法用于在运行时获取当前实例的类型,我认为您不打算覆盖它(您有一个int返回类型)

我建议您将该方法重命名为GetFooType或其他名称,或者实现接口以避免运行时问题。

该方法是在类上定义的,类是框架所有类的最终基类

此方法用于在运行时获取当前实例的类型,我认为您不打算覆盖它(您有一个int返回类型)


我建议您将该方法重命名为GetFooType或其他名称,或者实现您的接口以避免运行时问题。

这并不是抱怨您对接口的实现,而是您对已经在“object”上的GetType()的重新实现,Foo自动从中继承。“Object”没有GetDisplayName方法,因此不会对该方法提出任何投诉。如果确实要隐藏object.GetType(),请尝试重命名该方法或添加“new”修饰符,尽管不建议这样做。

这并不是抱怨接口的实现,而是抱怨已经在“object”上的GetType()的重新实现,Foo会自动从中继承它。“Object”没有GetDisplayName方法,因此不会对该方法提出任何投诉。如果确实要隐藏object.GetType(),请尝试重命名该方法或添加“new”修饰符,尽管不建议这样做。

NET中的所有类型都派生自System.object

对象已经定义了一个名为GetType的方法。如果在类中定义了另一个方法“GetType”,并且有人创建了类的对象,则他们永远不能调用System.object提供的GetType方法。这就是您收到“GetType”隐藏System.Object中定义的方法的警告的原因。对于GetDisplayName,您不会收到此警告,因为System.Object(或任何父类)未定义此方法


我建议您将方法名称更改为其他名称,因为.NET开发人员通常希望GetType方法调用引用System.Object实现

.NET中的所有类型都派生自System.Object

对象已经定义了一个名为GetType的方法。如果在类中定义了另一个方法“GetType”,并且有人创建了类的对象,则他们永远不能调用System.object提供的GetType方法。这就是您收到“GetType”隐藏System.Object中定义的方法的警告的原因。对于GetDisplayName,您不会收到此警告,因为System.Object(或任何父类)未定义此方法


我建议您将方法名称更改为其他名称,因为.NET开发人员通常希望GetType方法调用引用System.Object实现

它指的是从对象中隐藏的方法,而不是从接口中隐藏的方法。由于您的类继承对象并实现
IFoo
,并且两者都提供了
GetType
方法,因此通过隐式实现接口,您将隐藏从对象继承的
GetType
。如果仍然希望调用接口方法
GetType
,可以在
Foo
中显式实现它:

int IFoo.GetType()
{
    return 3;
}

它指的是从对象中隐藏的方法,而不是从接口中隐藏的方法。由于您的类继承对象并实现
IFoo
,并且两者都提供了
GetType
方法,因此通过隐式实现接口,您将隐藏从对象继承的
GetType
。如果仍然希望调用接口方法
GetType
,可以在
Foo
中显式实现它:

int IFoo.GetType()
{
    return 3;
}

Object类已经具有GetType()方法


您应该使用new或override关键字来解决此问题

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


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

哇,你们都太不可思议了。4分钟内回答4个高质量问题!如何选择最佳答案?我认为链接为我做到了这一点,尽管很接近。再次感谢大家!哇,你们都难以置信。4分钟内回答4个高质量问题!如何选择最佳答案?我认为链接为我做到了这一点,尽管很接近。再次感谢大家!