[英]Explicit implementation of an interface using an automatic property
有什么方法可以使用自动属性来显式实现接口吗? 例如,考虑以下代码:
namespace AutoProperties
{
interface IMyInterface
{
bool MyBoolOnlyGet { get; }
}
class MyClass : IMyInterface
{
static void Main(){}
public bool MyBoolOnlyGet { get; private set; } // line 1
//bool IMyInterface.MyBoolOnlyGet { get; private set; } // line 2
}
}
这段代码会编译。 但是,如果将第1行替换为第2行,则不会编译。
(并不是我需要使第2行正常工作-我只是很好奇。)
实际上,该语言不支持这种特定的安排(通过自动实现的属性明确实现仅获取接口的属性)。 因此, 要么手动(带有字段)执行,要么编写一个私有的自动实现的道具,然后代理它。 但老实说,当您完成操作时,您可能已经使用了一个字段...
private bool MyBool { get;set;}
bool IMyInterface.MyBoolOnlyGet { get {return MyBool;} }
要么:
private bool myBool;
bool IMyInterface.MyBoolOnlyGet { get {return myBool;} }
问题在于该接口只有getter,您尝试使用getter和setter显式实现它。
当您显式实现接口时,仅当引用为接口类型时才调用显式实现,因此...如果接口仅具有getter,则无法使用setter,因此在那里没有setter是没有意义的。
例如,这将编译:
namespace AutoProperties
{
interface IMyInterface
{
bool MyBoolOnlyGet { get; set; }
}
class MyClass : IMyInterface
{
static void Main() { }
bool IMyInterface.MyBoolOnlyGet { get; set; }
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.