有没有办法使用自动属性显式地实现一个接口?例如,考虑以下代码:
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行,它将无法编译。
(这并不是说我需要让第二行工作--我只是好奇。)
发布于 2010-10-11 09:37:50
实际上,该语言不支持这种特定的安排(通过自动实现的属性显式实现get-only接口属性)。因此,要么手动完成(使用字段),要么编写一个私有的自动实现的属性,并对其进行代理。但老实说,当你做完这件事的时候,你可能已经使用了一个字段...
private bool MyBool { get;set;}
bool IMyInterface.MyBoolOnlyGet { get {return MyBool;} }
或者:
private bool myBool;
bool IMyInterface.MyBoolOnlyGet { get {return myBool;} }
发布于 2010-10-11 09:38:45
问题是该接口只有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; }
}
}
https://stackoverflow.com/questions/3905000
复制