2009-04-19 3 views
2

Каковы преимущества и недостатки множественного наследования?Каковы преимущества и недостатки многократного наследования?

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

UPDATE Ok, так что в настоящее время избежать из-за проблемы с столкновений решения, какой метод родитель называют и т.д. Конечно, это является проблемой для программиста, чтобы решить. Или, может быть, это может быть разрешено аналогичным образом, поскольку SQL, где есть конфликт, требуется больше информации, т. Е. Идентификатор может понадобиться стать Sales.ID для разрешения конфликта в запросе.

+0

http://stackoverflow.com/questions/225929/what-is-the-exact-problem-with-multiple-inheritance - похоже на аналогичный вопрос –

ответ

6

Вот хорошее обсуждение ловушек множественного наследования:

Why should I avoid multiple inheritance in C++?

Вот обсуждение из C# команды о том, почему они решили не допускать множественное наследование:

1

Главное, что если два класса имеют метод с тем же именем, новый подкласс не знает, какой из них нужно вызвать.

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

class MyClass 
{ 
    private class1 : Class1; 
    private class2: Class2; 

    public MyClass 
    { 
     class1 = new Class1; 
     class2 = new Class2; 
    } 
    // Then, expose whatever functionality you need to from there. 
} 
2

дам про здесь на основе C++ Report-писателя я был converting to REALbasic (который имеет интерфейсы, но только одного наследование).

Множественное наследование упрощает составление классов из небольших базовых классов mixin, которые реализуют функциональность и обладают свойствами для запоминания состояния. Когда все будет сделано правильно, вы можете получить много повторного использования небольшого кода без необходимости копировать и вставлять аналогичный код для реализации интерфейсов.

К счастью, REALbasic имеет расширяет методы, которые подобны методам расширения недавно добавленных к C# в C# 3.0. Это немного помогает с проблемой, тем более что они могут применяться к массивам. Я по-прежнему получал некоторые иерархии классов, которые были более глубокими в результате складывания в ранее умноженных классах.

0

Когда вы унаследовали от чего вы утверждаете, что ваш класс этого (базового) типа во всех отношениях, за исключением, что вы можете реализовать что-то немного по-другому или добавить что-то к нему, его на самом деле крайне редко, что ваш класс является 2 вещи сразу. Обычно это просто имеет общий характер для двух или более вещей, и лучший способ описать, что обычно состоит в том, чтобы ваш класс реализовал несколько интерфейсов. (или, возможно, инкапсуляция, в зависимости от ваших обстоятельств)

0

Это одна из тех приколов, которые мне не нравятся, как в Java.

Хотя приятно распространять поля и методы из нескольких источников (представьте себе современный мобильный телефон, который наследуется от MP3-плееров, камер, спутниковых навигаторов и скромного старого школьного мобильного телефона), столкновения не могут быть решены с помощью только компилятор.

3

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

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

+0

Ну, в C# это еще не инструмент в коробке ! :) –

+0

+1, но, по моему мнению, это единственный правильный выбор в редких случаях. – hasen

+0

Так же, как «типичный пример учебника»: Кот дома является млекопитающим и домашним животным. Выразить это как композицию в лучшем случае неудобно. Есть млекопитающие, которые не являются домашними животными, и домашними животными, которые не являются млекопитающими. Как домашнее животное, кошка может иметь владельца, показатель лояльности, номер налога. Как млекопитающее, он может иметь статус кормления, длину в целом, длину хвоста, меховой цвет. – Svante

Смежные вопросы