Рассмотрим следующий класс и интерфейсы:
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 # не может это понять? Это то, что я м сумасшедший с архитектурной точки зрения? Я пытаюсь понять , почему (я знаю, что это можно решить с помощью кастинга).
РЕДАКТИРОВАТЬ
Проблемы возникли, когда я представил интерфейс C
. Когда я использую MyClass: A, B
, у меня вообще нет проблем.
FINAL
Только что закончил блог на тему: Неоднозначность интерфейса и неявная реализация .