有没有办法使用自动属性显式实现接口?例如,请考虑以下代码:
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行工作 - 我只是好奇。)
答案 0 :(得分:15)
实际上,该语言不支持该特定安排(由自动实现的属性显式实现get-only接口属性)。所以要么手动(带字段),要么写一个私有的自动实现的prop,并代理它。但说实话,当你完成这项工作时,你可能也会使用一个领域......
private bool MyBool { get;set;}
bool IMyInterface.MyBoolOnlyGet { get {return MyBool;} }
或:
private bool myBool;
bool IMyInterface.MyBoolOnlyGet { get {return myBool;} }
答案 1 :(得分:5)
问题是界面只有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; }
}
}