次のクラスとインターフェースを検討してください。
public interface A { string Property { get; set; } }
public interface B { string Property { get; set; } }
public interface C : A, B { }
public class MyClass : C
{
public string Property { get; set; }
}
シンプルに見えますよね?ここで、次のプログラムを検討してください。
static void Main(string[] args)
{
MyClass myClass = new MyClass();
myClass.Property = "Test";
A aTest = myClass;
B bTest = myClass;
C cTest = myClass;
aTest.Property = "aTest";
System.Console.WriteLine(aTest.Property);
bTest.Property = "bTest";
System.Console.WriteLine(bTest.Property);
cTest.Property = "cTest";
System.Console.WriteLine(cTest.Property);
System.Console.ReadKey();
}
問題ないように見えますが、コンパイルされません。それは私に曖昧な例外を与えます:
C# がこれを理解できないのはなぜですか? 私がやっていることは、アーキテクチャの観点からクレイジーですか? 理由を理解しようとしています(キャストで解決できることはわかっています)。
編集
interface を導入したときに問題が発生しましたC
。使っMyClass : A, B
てみると全く問題ありません。
最後の
このテーマに関するブログをちょうど完成させました: Interface Ambiguity and Implicit Implementation。