为什么显式接口方法实现看不到其他接口方法? [重复]
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.Property
或this.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}"); }
}
以上是关于为什么显式接口方法实现看不到其他接口方法? [重复]的主要内容,如果未能解决你的问题,请参考以下文章