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

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

🟡 15:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
Статус: Offline
Реєстрація: 30.03.2007
Повідом.: 1280
  • 🟡 15:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #1
Почему в С# нету множественного наследования?

Вот недавно задумался над этим вопросом. Нигде толкового ответа не встречал, гугль тоже не помог. А факт есть факт, при создании языка убрали множественное наследование, но с какой именно целью, кроме как избежать проблем множественного наследования.
 
  • 🟡 15:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #2
"Убрали" это несколько неудачно сказано, скорее просто нереализовали из-за большого геморроя с CLR.
Хотя вот в 4-ке вроде обещали сделать МН через Minherit.
 
  • 🟡 15:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #3
Чтобы избежать проблем множественного наследования. :)
 
  • 🟡 15:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #4
И чем, кстати, релизация нескольких интерфейсов не подходит?
 
  • 🟡 15:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #5
подходит, просто интересно :)
 
  • 🟡 15:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #6
  • 🟡 15:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #7
ИМХО не реализовали потому, что механизм это достаточно сложный и если им неправильно пользоваться, то получишь больше пробем, чем удовольствия.
Просто из-за таких вещей, грубо говоря, какой-нибудь человечек с ошибкой в ДНК может для того, чтобы получить машину с радио, отнаследоваться от машины и радио:).
 
  • 🟡 15:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #8
Именно! Потому что множественное наследование создаёт больше гемора, чем даёт преимуществ. ИМХО. Чтоб читаемость кода повысить. Тоже ИМХО.
 
  • 🟡 15:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #9
  • 🟡 15:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #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
Посилання видалено
 
  • 🟡 15:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #11
А зачем оно надо множественное наследование? Слабо реальный пример привести, в котором я например не обойдусь без него? :) Уверен - слабо. Поэтому и убрали :)

Ну, у меня в проекте было, например, когда объект - DS1 порт должен поддерживать пропагацию дефектов в своём стеке протоколов (SONET) и обновременно использует паттерн Observer, соответственно должен унаследоваться от двух разных интерфейсов.
 
  • 🟡 15:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #12
видно, Вас там зобанили...
Посилання видалено
третья строчка результатов:


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

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

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

ну так это же наследование от нескольких интерфейсов а не классов ;). Термин "множественное наследование" как я понимаю подразумевает наследование от нескольких КЛАССОВ (именно классов)
 
  • 🟡 15:37 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
  • #13
Термин "множественное наследование" как я понимаю подразумевает наследование от нескольких КЛАССОВ (именно
классов)

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