Мне было бы очень интересно получить более авторитетный ответ, но вот мой прием.
В языках, поддерживающих множественное наследование, ключевая двусмысленность, которая (возможно) неудовлетворительно разрешена, происходит, когда вы выполняете подкласс из двух типов, которые определяют метод с той же сигнатурой. Например:
public class BaseClass1
{
public string SomeMethod()
{
return "Implementation1";
}
}
public class BaseClass2
{
public string SomeMethod()
{
return "Implementation2";
}
}
public class MySuclass : BaseClass1, BaseClass2
{
}
Теперь, что возвращается?
MySubclass mySubclass = new MySubclass();
string s = mySubclass.SomeMethod();
В C# явная реализация интерфейса позволяет легко решить эту проблему с помощью definining как. После преобразования BaseClass1
и BaseClass2
интерфейсов, мы можем иметь
public class MySuclass : IBaseClass1, IBaseClass2
{
string IBaseClass1.SomeMethod()
{
return "Implementation1";
}
string IBaseClass2.SomeMethod()
{
return "Implementation2";
}
}
Ключа, конечно в том, что нет никакой двусмысленности с этим синтаксисом, как это не возможно получить доступ к SomeMethod
без первой отливки цели либо IBaseClass1
или IBaseClass2
.
То же [Почему C# doen't поддерживает множественное наследование] (http://stackoverflow.com/questions/2865302/why-c-doent-support-multiple-inheritance). –
, который является дубликом [Если C# включает множественное наследование?] (Http://stackoverflow.com/questions/191691/should-c-include-multiple-inheritance) –
@Marc, он был закрыт как таковой, но я не знаю Я действительно согласен. Почему это было спроектировано именно так и было ли правильным дизайном разные проблемы. –