KUMAR619 Ответов: 2

Почему C# не обеспечивает множественное наследование (интерфейс имеет только сигнатуру)


Это может быть глупый вопрос, но я хочу получить ответ на него.

Я узнал, что C# не допускает прямого множественного наследования. Поэтому используются интерфейсы.

Но мой вопрос заключается в том, что интерфейс имеет только подписи. Но абстрактный имеет конкретный метод, а другие базовые классы могут иметь свои собственные методы.

Так есть ли какой-нибудь способ достичь совершенного множественного наследования?


Примечание: Пожалуйста, поймите этот сценарий, прежде чем голосовать вниз.

Что я уже пробовал:

Он работает в C++, но не в C#. Поделюсь этим кодом, если потребуется.

2 Ответов

Рейтинг:
6

Swapnita Dessai

The answer to your question : So is there any way to achieve perfect multiple inheritance. ?  is NO.
The C# language is designed in that way. This may be to avoid the diamond problem which we see in C++. the workaround to this is using interfaces in C#. Two classes can implement the two interfaces , re-define the required methods. Then third class can implement the interfaces and then create objects of those two classes to invoke the methods.


Рейтинг:
18

OriginalGriff

Потому что разработчики языка решили этого не допустить.

Существует более глубокая причина этого в том, что она добавляет много сложности с не очень большой "реальной" выгодой, и причина этого называется проблемой Алмаза: Множественное наследование - Википедия[^] хорошо покрывает его.
Хотя есть способы обойти это - C++ позволяет это - они сильно усложняют вещи, и интерфейсы обеспечивают большую часть требуемой функциональности, особенно теперь, когда они могут содержать методы по умолчанию из C#8.0