Почему .Net / C # не может понять наследование интерфейсов с одноименными свойствами?

Рассмотрим следующий класс и интерфейсы:

    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();
    }

Выглядит нормально, но не компилируется. Это вызывает исключение неоднозначности:

Screenshot compiler

Почему C # не может это понять? Это то, что я м сумасшедший с архитектурной точки зрения? Я пытаюсь понять , почему (я знаю, что это можно решить с помощью кастинга).

РЕДАКТИРОВАТЬ

Проблемы возникли, когда я представил интерфейс C . Когда я использую MyClass: A, B , у меня вообще нет проблем.

FINAL

Только что закончил блог на тему: Неоднозначность интерфейса и неявная реализация .

7
задан Kees C. Bakker 8 April 2011 в 11:32
поделиться