C# のインターフェイス

メモ。

interface IStorable
{
  void Write();
  void Read();
  int Status { get; set; } //!<実装はしていないことに注意
}

interface ITalk
{
  void Talk();
  void Read();
}

public class Document : IStorable, ITalk //!<関数の名前 Read() が衝突
{
  int m_Status; 
  public Document() { Console.WriteLine("Document()"); }

  public void Write() { Console.Write("IStorable.Write()"); }
  public void Read() { Console.Write("IStorable.Read()"); }
  int Status { get{ return m_Status; } set{ m_Status = value; } }

  public void Talk() { Console.Write("ITalk.Talk()"); }
  public ITalk.Read() { Console.Write("ITalk.Talk()"); } //!<インターフェイス名を明示的に指定してメソッドを実装
}

public class Test
{
  Main()
  {
    Document aDoc = new Document();
    aDoc.Read(); //!< IStorable.Read() が呼び出される
    ITalk aTalk = aDoc;
    aTalk.Read(); //!< ITalk.Read() が呼び出される
  }
}