gpt4 book ai didi

c# - 为什么子类需要实现父接口(interface)来隐藏 C# 中的父方法之一?

转载 作者:太空狗 更新时间:2023-10-30 00:45:33 24 4
gpt4 key购买 nike

我在使用第三方库时发现了这种行为,我需要在其中隐藏和更改其中一个方法。

我有以下设置:

interface IBaseInterface
{
string MethodToHide();
}

class BaseClass : IBaseInterface
{
public string MethodToHide()
{
return "BaseClass";
}
}

class ChildClass : BaseClass
{
new public string MethodToHide()
{
return "ChildClass";
}
}

为什么当我运行以下命令时:

var i = (IBaseInterface) (new ChildClass());
Console.WriteLine(i.MethodToHide());

输出是

BaseClass

,但是当将 ChildClass 签名更改为

class ChildClass : BaseClass, IBaseInterface

,输出为

ChildClass

为什么要显式指定接口(interface)让 BaseClass 方法被 ChildClass 隐藏?

最佳答案

您需要阅读更多关于overridinghiding 的区别:

链接:Override versus Hide

简而言之:

隐藏(使用new)根据变量的类型运行方法。
Overriding 覆盖方法,只会使用子方法。

编辑:

当您使用接口(interface)变量时:

var i = (IBaseInterface) (new ChildClass());

编译器将搜索接口(interface)使用的方法的最佳匹配。
因为你声明了 BaseClass 来实现接口(interface),所以它的方法将被选择。

如果 ChildClass 没有显式实现接口(interface),则编译器无法将方法链接到接口(interface)。从它的角度来看,BaseClass 恰好具有同名的方法。

当您显式声明ChildClass也实现了该接口(interface)时,其方法将是最佳选择。

关于c# - 为什么子类需要实现父接口(interface)来隐藏 C# 中的父方法之一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5276954/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com