Змінюй хід війни! Допомагай ЗСУ!

Почему в С# нету множественного наследования?

🔴 21:30 Повітряна тривога в Харків.обл.
Статус: Offline
Реєстрація: 30.03.2007
Повідом.: 1280
  • 🔴 21:30 Повітряна тривога в Харків.обл.
  • #1
Почему в С# нету множественного наследования?

Вот недавно задумался над этим вопросом. Нигде толкового ответа не встречал, гугль тоже не помог. А факт есть факт, при создании языка убрали множественное наследование, но с какой именно целью, кроме как избежать проблем множественного наследования.
 
  • 🔴 21:30 Повітряна тривога в Харків.обл.
  • #2
"Убрали" это несколько неудачно сказано, скорее просто нереализовали из-за большого геморроя с CLR.
Хотя вот в 4-ке вроде обещали сделать МН через Minherit.
 
  • 🔴 21:30 Повітряна тривога в Харків.обл.
  • #3
Чтобы избежать проблем множественного наследования. :)
 
  • 🔴 21:30 Повітряна тривога в Харків.обл.
  • #4
И чем, кстати, релизация нескольких интерфейсов не подходит?
 
  • 🔴 21:30 Повітряна тривога в Харків.обл.
  • #5
подходит, просто интересно :)
 
  • 🔴 21:30 Повітряна тривога в Харків.обл.
  • #7
ИМХО не реализовали потому, что механизм это достаточно сложный и если им неправильно пользоваться, то получишь больше пробем, чем удовольствия.
Просто из-за таких вещей, грубо говоря, какой-нибудь человечек с ошибкой в ДНК может для того, чтобы получить машину с радио, отнаследоваться от машины и радио:).
 
  • 🔴 21:30 Повітряна тривога в Харків.обл.
  • #8
Именно! Потому что множественное наследование создаёт больше гемора, чем даёт преимуществ. ИМХО. Чтоб читаемость кода повысить. Тоже ИМХО.
 
  • 🔴 21:30 Повітряна тривога в Харків.обл.
  • #10
гугль тоже не помог.
видно, Вас там зобанили...
Посилання видалено
третья строчка результатов:

There were many factors that influenced the .NET team to favor not implementing multiple inheritance. A few of the more prominent ones include:

.NET was designed to support multiple languages, but not all languages can effectively support multiple inheritance. Or technically they could, but the complexities added in language semantics would make some of those languages more difficult to use (and less similar to their roots, like VB, and for backward compatibility reasons) and not worth the trade-off of being able to reuse code in the manner of multiple inheritance
It would also make cross-language library interoperability (via CLS compliance) less of a reality than it is today, which is one of the most compelling features of .NET. There are over 50 languages supported on .NET in over 70 implementations today
The most visible factor is language semantics complexity. In C++ we needed to add explicit language features in order to address ambiguities (such as the classic diamond problem) caused by multiple inheritance, such as the "virtual" keyword to support virtual inheritance to help the compiler resolve inheritance paths (and we had to use it correctly too)
As we know code is written 20% of the time, but read 80% of the time. Thus advocates on simplicity side prefer not to add language features for the sake of keeping semantics simple. In comparison C# code is significantly simpler to read than C++ code, and arguably easier to write
Посилання видалено
 
  • 🔴 21:30 Повітряна тривога в Харків.обл.
  • #11
А зачем оно надо множественное наследование? Слабо реальный пример привести, в котором я например не обойдусь без него? :) Уверен - слабо. Поэтому и убрали :)

Ну, у меня в проекте было, например, когда объект - DS1 порт должен поддерживать пропагацию дефектов в своём стеке протоколов (SONET) и обновременно использует паттерн Observer, соответственно должен унаследоваться от двух разных интерфейсов.
 
  • 🔴 21:30 Повітряна тривога в Харків.обл.
  • #12
видно, Вас там зобанили...
Посилання видалено
третья строчка результатов:


Посилання видалено

спасибо! честно, так глубоко не докопался когда искал ;)

Ну, у меня в проекте было, например, когда объект - DS1 порт должен поддерживать пропагацию дефектов в своём стеке протоколов (SONET) и обновременно использует паттерн Observer, соответственно должен унаследоваться от двух разных интерфейсов.

ну так это же наследование от нескольких интерфейсов а не классов ;). Термин "множественное наследование" как я понимаю подразумевает наследование от нескольких КЛАССОВ (именно классов)
 
  • 🔴 21:30 Повітряна тривога в Харків.обл.
  • #13
Термин "множественное наследование" как я понимаю подразумевает наследование от нескольких КЛАССОВ (именно
классов)

а зачем это нужно? :confused: Ничего кроме запутывания кода это не дает. В том-же C++ множественное наследование как правило использовалось там где его не нужно было использовать... :)
C# разрабатывался с целью упростить написание софта без ошибок. Множественное наследование - это можно сказать ось зла... с этой точки зрения :)
 
Назад
Зверху Знизу