我正在学习界面属性并遇到了一些我认为应该基于MSDN和书籍示例工作的东西,但事实并非如此。如果我显式地实现了接口属性,那么在我的类实例尝试访问时就无法识别它,但是如果我隐式地执行它,则工作正常(不确定这是否是正确的术语)。
interface IMyInterface
{
string Name { get; set; }
}
class MyClass : IMyInterface
{
private string name;
string IMyInterface.Name //works if not explicit: i.e., public string Name
{
get { return this.name; }
set { this.name = value; }
}
}
class Program
{
static void Main(string[] args)
{
MyClass myClass = new MyClass();
myClass.Name = "blah"; // fails
}
}
答案 0 :(得分:3)
这是应该如何使用explicit interface implementations:
实现接口的类可以显式实现该接口的成员。当一个成员被显式实现时,它不能通过类实例访问,而只能通过接口的实例访问。
因此,如果您重新编写这样的代码,它就不会再失败了:
static void Main(string[] args)
{
IMyInterface myClass = new MyClass();
myClass.Name = "blah"; // no longer fails
}