C# поддерживает множественное наследование?

У коллеги и меня есть что-то вроде аргумента по множественному наследованию. Я говорю, что это не поддерживается, и он говорит, что это. Так, я думал, что спрошу мозговитый набор относительно сети.

55
задан Neil Knight 16 March 2010 в 16:28
поделиться

8 ответов

Неа, используйте интерфейсы вместо этого! ^.^

43
ответ дан 26 November 2019 в 17:37
поделиться

В качестве дополнительного предложения к тому, что уже было предложено, еще один умный способ обеспечить функциональность, подобную множественному наследованию, - реализовать несколько интерфейсов BUT затем предоставить методы расширения этих интерфейсов. Это называется mixins. Это не настоящее решение, но иногда оно решает проблемы, которые побудили бы вас захотеть выполнить множественное наследование.

0
ответ дан 26 November 2019 в 17:37
поделиться

На самом деле, это зависит от вашего определения наследования:

  • вы можете наследовать реализацию (элементы, т.е. данные и поведение) от единственный класс, но
  • вы можете наследовать интерфейсов от нескольких , ну, интерфейсов.

Это не то, что обычно подразумевают под термином «наследование», но также не совсем необоснованно определять его таким образом.

3
ответ дан 26 November 2019 в 17:37
поделиться

Как и Java (от которой косвенно был получен C #), C # не поддерживает множественное наследование.

То есть данные класса (переменные-члены и свойства) могут быть унаследованы только от единственного родительского базового класса . С другой стороны, поведение класса (методы-члены) может быть унаследовано от нескольких родительских базовых интерфейсов .

Некоторые эксперты, в частности Бертран Мейер (которого некоторые считают одним из отцов объектно-ориентированного программирования), считают, что это лишает C # (и Java, и всех остальных) статуса " истинный "объектно-ориентированный язык".

4
ответ дан 26 November 2019 в 17:37
поделиться

Вы не можете выполнять множественное наследование в C # до версии 3.5. Я не знаю, как это работает на 4.0, так как я не смотрел на это, но @tbischel опубликовал ссылку, которую мне нужно прочитать.

C # позволяет выполнять «множественные реализации» через интерфейсы, что сильно отличается от «множественного наследования»

Итак, вы не можете делать:

class A{}

class B{}

class C : A, B{}

Но вы можете:

interface IA{}
interface IB{}

class C : IA, IB{}

HTH

7
ответ дан 26 November 2019 в 17:37
поделиться

C# 3.5 и ниже не поддерживает множественное наследование, но C# 4.0 может сделать это, используя, как я помнил, Dynamics.

13
ответ дан 26 November 2019 в 17:37
поделиться

Извините, вы не можете наследовать от нескольких классов. Вы можете использовать интерфейсы или комбинацию одного класса и интерфейса(ов), где за интерфейсом (интерфейсами) должно следовать имя класса в подписи.

interface A { }
interface B { }
class Base { }
class AnotherClass { }

Возможные способы наследования:

class SomeClass : A, B { } // from multiple Interface(s)
class SomeClass : Base, B { } // from one Class and Interface(s)

Это не законно:

class SomeClass : Base, AnotherClass { }
87
ответ дан 26 November 2019 в 17:37
поделиться

Вы можете пойти дальше в своей аргументации и поговорить о шаблонах проектирования - и вы узнаете, почему он хотел бы попытаться унаследовать от несколько классов на C #, если бы он вообще мог

2
ответ дан 26 November 2019 в 17:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: