【发布时间】:2019-12-02 08:44:35
【问题描述】:
我刚刚反编译了一些 3rd-party 界面,并对以下内容摸不着头脑:
public interface IFoo
{
string Name { get; set; }
}
public interface IBar : IFoo
{
new string Name { get; set; }
}
如您所见,我有两个接口,其中IBar 通过隐藏Name 属性扩展IFoo。但是我看不到 new-keyword 在这里做什么。我读过an answer from Eric Lippert,它与返回类型不同的成员有关。但是在我的情况下,一切都只是一个字符串。
当然,我们可以显式地实现任何一个接口。但无论如何,如果没有new,这将是可能的。
【问题讨论】:
-
我认为这里的
new只是表明Name在IBar中的功能与IFoo中的实现是不同的,并且不同 .您实质上是在声明IBar.Name没有实现或替换IFoo.Name- 它是对它的补充,只是 碰巧 共享相同的名称 -
返回类型不同的成员是这种模式的常见原因。您在这里介绍的界面模式没有多大意义;你能详细说说你发现这个模式在哪里使用,它的用途是什么?
-
@EricLippert 我无权访问源代码。我得到的只是 ArcObjects 的公共接口。原始方法的名称不同,但是两个版本都返回
string。
标签: c# interface member-hiding