为什么显式接口方法实现看不到其他接口方法? [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么显式接口方法实现看不到其他接口方法? [重复]相关的知识,希望对你有一定的参考价值。

interface IThing
{
 int Property {get;}
 void Method();
}

class Thing : IThing
{
 int IThing.Property {get; } = 999;
 void IThing.Method() {Console.WriteLine($"Property = {Property}");}
}

这将导致编译器错误“名称属性在当前上下文中不存在”。无论我指的是Property还是IThing.Propertythis.Property

为什么显式接口实现似乎相互屏蔽了接口方法?这是我的语言功能还是语法错误(我以前没有使用过显式的接口实现,因此正在对其进行测试以查看结果)。

答案

您必须引用this作为接口的实例。您可以通过投射来做到这一点。

Console.WriteLine($"Property = {((IThing)this).Property}");

另请参阅Explicit Interface Implementation以获取更多详细信息。

另一答案

之所以无法访问该属性,是因为您已经明确实现了接口,这意味着必须将类实例转换为接口的类型。如果要访问属性而不进行强制转换,则必须通过以下方式实现接口:

interface IThing
{
    int Property { get; }

    void Method();
}

class Thing : IThing
{
    public int Property { get; }

    public void Method() { Console.WriteLine($"Property = {Property}"); }
}

以上是关于为什么显式接口方法实现看不到其他接口方法? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

C#:在实现的方法中显式指定接口

为啥要显式实现接口?

C#接口的隐式和显式实现之间的区别[重复]

C#图解教程 第十五章 接口

C#接口的隐式和显式实现

在 C# 中实现接口与显式实现接口 [重复]