显式定义时,接口属性失败

时间:2012-06-29 03:51:10

标签: c# properties explicit-interface

我正在学习界面属性并遇到了一些我认为应该基于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

    }
}

1 个答案:

答案 0 :(得分:3)

这是应该如何使用explicit interface implementations

  

实现接口的类可以显式实现该接口的成员。当一个成员被显式实现时,它不能通过类实例访问,而只能通过接口的实例访问。

因此,如果您重新编写这样的代码,它就不会再失败了:

static void Main(string[] args)
{
    IMyInterface myClass = new MyClass();
    myClass.Name = "blah";  // no longer fails
}