Благодарим @CodeCaster за его / ее замечательные комментарии, которые вызвали этот ответ.
Предложение гласит:
Примечаниечто класс не наследует членов от своих интерфейсов;это не изменяется с помощью этой функции:
Таким образом, кажется разумным (хотя невозможно подтвердить со 100% -ной уверенностью до его отправки), что:
public interface A { int Foo() => return 1; }
public interface B { int Foo() => return 2; }
public class C : A, B { }
будет работать нормально.
Как показано в предложении:
new C().M(); // error: class 'C' does not contain a member 'M'
, тогда мы можем предположить, что ваша версия:
new C().Foo();
также не будет компилироваться.
Предложение показывает:
IA i = new C();
i.M();
как действительное, что эквивалентно вашему:
A i = new C();
i.Foo();
Поскольку i
объявлено как тип A
, нет оснований предполагать, что то же самоене будет работать, если A
было изменено на B
- нет никаких коллизий, о которых можно было бы говорить.
Весь смысл этой функции - обеспечить безопасное расширение интерфейсов (см. это видео ).Если это только сработало, если вы реализовали один интерфейс, это, кажется, противоречит цели функции.И учитывая, что эта функция, по-видимому, реализована таким образом, примерно сродни явной реализации интерфейса (именно поэтому мы не можем вызывать C.Foo()
напрямую), я думаю, мы можем разумно предположитьчто это, скорее всего, позволит реализовать несколько интерфейсов.