1

インターフェイスのプロパティについて学んでいて、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

    }
}
4

1 に答える 1

3

これは、明示的なインターフェイスの実装で動作するはずの方法です。

インターフェイスを実装するクラスは、そのインターフェイスのメンバーを明示的に実装できます。メンバーが明示的に実装されている場合、クラス インスタンスを介してアクセスすることはできず、インターフェイスのインスタンスを介してのみアクセスできます。

したがって、コードを次のように書き直すと、失敗することはなくなります。

static void Main(string[] args)
{
    IMyInterface myClass = new MyClass();
    myClass.Name = "blah";  // no longer fails
}
于 2012-06-29T03:55:12.300 に答える