У коллеги и меня есть что-то вроде аргумента по множественному наследованию. Я говорю, что это не поддерживается, и он говорит, что это. Так, я думал, что спрошу мозговитый набор относительно сети.
В качестве дополнительного предложения к тому, что уже было предложено, еще один умный способ обеспечить функциональность, подобную множественному наследованию, - реализовать несколько интерфейсов BUT затем предоставить методы расширения этих интерфейсов. Это называется mixins. Это не настоящее решение, но иногда оно решает проблемы, которые побудили бы вас захотеть выполнить множественное наследование.
На самом деле, это зависит от вашего определения наследования:
Это не то, что обычно подразумевают под термином «наследование», но также не совсем необоснованно определять его таким образом.
Как и Java (от которой косвенно был получен C #), C # не поддерживает множественное наследование.
То есть данные класса (переменные-члены и свойства) могут быть унаследованы только от единственного родительского базового класса . С другой стороны, поведение класса (методы-члены) может быть унаследовано от нескольких родительских базовых интерфейсов .
Некоторые эксперты, в частности Бертран Мейер (которого некоторые считают одним из отцов объектно-ориентированного программирования), считают, что это лишает C # (и Java, и всех остальных) статуса " истинный "объектно-ориентированный язык".
Вы не можете выполнять множественное наследование в C # до версии 3.5. Я не знаю, как это работает на 4.0, так как я не смотрел на это, но @tbischel опубликовал ссылку, которую мне нужно прочитать.
C # позволяет выполнять «множественные реализации» через интерфейсы, что сильно отличается от «множественного наследования»
Итак, вы не можете делать:
class A{}
class B{}
class C : A, B{}
Но вы можете:
interface IA{}
interface IB{}
class C : IA, IB{}
HTH
C# 3.5 и ниже не поддерживает множественное наследование, но C# 4.0 может сделать это, используя, как я помнил, Dynamics.
Извините, вы не можете наследовать от нескольких классов
. Вы можете использовать интерфейсы или комбинацию одного класса и интерфейса(ов)
, где за интерфейсом (интерфейсами) должно следовать имя класса в подписи.
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 { }
Вы можете пойти дальше в своей аргументации и поговорить о шаблонах проектирования - и вы узнаете, почему он хотел бы попытаться унаследовать от несколько классов на C #, если бы он вообще мог