雑記 - otherwise

最近はDQ10しかやっていないダメ技術者がちまちまと綴る雑記帳

interface の明示的な実装の例

まぁ、なぜ 2 種類あるかはガイドの方を見てもらうとして。
この機能を(私が)よく利用するのは、やはり interface で規定されるメソッドの返却値を実装クラスで替える(明示する)様な場合ですね。
典型的な例が ICloneable.Clone() の実装のケース。

class SomeClass : ICloneable {
  #region 明示的な実装
  object ICloneable.Clone() {
    return this.Clone();
  }
  #endregion

  #region 実装クラスで同名のメソッドを作成
  // ICloneable.Clone() の返却値の型は汎用型 (object) なので
  // 自クラスのインスタンスを返す
  public SomeClass Clone() {
    SomeClass obj = new SomeClass();
    // ディープコピーロジックを実装 ..
    return obj;
  }
  #rendregion

こうしないと呼び出し側でいちいちキャストしなきゃいけなくなるので、重宝しています。
……ちなみに、「プロパティやメソッドなどの同じ名前を持つ別々のメンバを 2 つのインターフェイスがそれぞれ宣言するケースを解決する場合」とかは遭遇した事がないです。