С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/35: Рейтинг темы: голосов - 35, средняя оценка - 4.97
5 / 5 / 0
Регистрация: 28.02.2013
Сообщений: 121

Множественное наследование в С#

29.03.2013, 20:59. Показов 7176. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можно ли в С# сделать что-то похожее на множественное наследование в C++?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.03.2013, 20:59
Ответы с готовыми решениями:

Множественное наследование
Доброго времени суток, форумчане! Собственно проблема: Есть класс Creature, от него наследуются классы Hero, Enemy, Boss; Естественно...

Множественное наследование.
В C# оно запрещено. Но в тоже время если: class A Class B: A Class C: B Такое возможно и при этом класс C унаследует все от класса...

Множественное наследование
Добрый день, есть такая задача Программа имеет определенный набор классов и методов. Сейчас решил реализовать класс MainClass в котором...

14
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
29.03.2013, 21:06
SlavaStas, можно: реализовывать интерфейсы.
0
51 / 38 / 5
Регистрация: 14.01.2012
Сообщений: 127
29.03.2013, 21:07
SlavaStas, можно только много интерфейсов имплиментировать.
Или вопрос в том как обойтись без этого в конкретном случае?
0
5 / 5 / 0
Регистрация: 28.02.2013
Сообщений: 121
29.03.2013, 21:08  [ТС]
nrv, про интерерфейы я в Шилде прочитал, но так и не понял, как это делается? Тоесть, я пишу интерфейс, в котор опысываю методы, а потом пишу, скажем, три класса, в которых делаю реализацию этих методов? при чем, в одном классе я пишу чатсть методов, в другом часть, а в третьем, который наследуется от этих двух, я описываю заново методы всех трех классов?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
29.03.2013, 21:13
SlavaStas, интерфейс - это то же самое, что и абстрактный класс, но он не содержит никаких полей - только сигнатуры методов. Ну и как следствие их можно наследовать сколько угодно. Так решается вопрос о ромбовидном наследовании и некоторые другие баги. Например интерфейс
IEnumerable<T> содержит всего 1 метод GetEnumerator. Но этого достаточно, чтобы обходить свой класс с помощью foreach, позволять ему учавствовать в LINQ-запросах и тд
0
51 / 38 / 5
Регистрация: 14.01.2012
Сообщений: 127
29.03.2013, 21:16
SlavaStas, если наследуемся от класса, то метод реализовывать не обязательно (если не абстрактный) (и вообще это уже будет называться сокрытием или переопределением). Даже если этот метод является реализацией какого-то интерфейса.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
29.03.2013, 21:19
SlavaStas, вот конкретный пример:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    interface IWorker
    {
        int GetSalary();
    }
 
    interface IAutoOwner
    {
        string GetAutoName();
    }
 
    class EmployeeWithAuto : IWorker, IAutoOwner
    {
        public int GetSalary()
        {
            return 10000;
        }
 
        public string GetAutoName()
        {
            return "Лада Калина";
        }
    }

nrv, вам вопрос на засыпку все массивы реализуют интерфейс IList, в котором содержатся метод Add, Insert, RemoveAt, свойство Count и тд... Но массив не содержит этих методов. Вопрос: как так?
0
5 / 5 / 0
Регистрация: 28.02.2013
Сообщений: 121
29.03.2013, 21:26  [ТС]
Psilon, nrv, вы все так умно расписали, спасибо, но я все равно мало что понял
смотрите, вот на конкретном примере:
мне нужно создать иерархию классов с полями:
Автор (фамилия, имя)
Файл (название, расширение, дата создание, размер, атрибут)
Документ (файл, автор, ключевые слова)

ну там еще несколько классов, но то не важно, пойму тут - дальше сам разберусь...
так вот, на сколько я понимаю, в С++ это делается следующим образом:
C++ (Qt)
1
2
3
4
5
class writer { ... }
 
class file { ... }
 
class document:writer,file { ... }
ну и так далее... как это сделать в шарпе?

Добавлено через 2 минуты
Psilon, то есть все методы мне надо описывать, исходя из моего примера, в классе Document, а файл и автор сделать интерфейсами?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6101 / 4957 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
29.03.2013, 21:29
SlavaStas, наследование аналогично таковому в природе. Если в программировании мы говорим, что класс B наследует от класса A, это означает, что B это A (что кстати легко в коде проверить операцией is).
То есть мужчина наследует от класса человек, потому что мужчина ЭТО человек.
Женщина наследует от класса человек, потому что женщина ЭТО человек
Магазин не может наследовать от книги, потому что магазин ЭТО НЕ КНИГА

в вашем случае документ не может наследовать от писателя, потому что ДОКУМЕНТ НЕ ПИСАТЕЛЬ

В вашем случае
C#
1
2
3
4
5
6
class Document
{
    public Writer Writer;
    public File File;
    public string[] KeyWords
}
если ваше же задание прочитать, то там не написано документ ЯВЛЯЕТСЯ файлом и писателем, а там написано "иерархию классов с полями".
А вот сделать автора и файл полями никто не мешает. Иерархии тут никакой нет и быть не может. В самом крайнем случае документ может наследовать класс файла и иметь дополнительное поле Писателя. То есть
C#
1
2
3
4
5
class Document : File
{
    public Writer Writer;
    public string[] KeyWords
}
0
5 / 5 / 0
Регистрация: 28.02.2013
Сообщений: 121
29.03.2013, 21:32  [ТС]
Psilon, я понимаю, но в данном случае, это задание лабораторной работы... здание довольно странное, но препод древний как динозавры, так что ему, к сожалению, предъявить нечего... Могу вам написать все задание, может предложите что как наследовать...
0
51 / 38 / 5
Регистрация: 14.01.2012
Сообщений: 127
29.03.2013, 21:32
SlavaStas, просто сделай писателя полем в документе. Да и файл тоже(хотя что такое файл в данном контексте и документ не очень понятно)
А.. препод .. ну пиши в каждом классе свою реализацию..

Psilon, Про явную реализацию я слышал, но разве есть какие-то противоречия с моим постом?
0
5 / 5 / 0
Регистрация: 28.02.2013
Сообщений: 121
29.03.2013, 21:42  [ТС]
Psilon, ладно, я в принципе пока так и сделал, думал может как по другому можно. Спасибо.

А с интерфейсами, я все же не доконца понял. То есть если сделать интерфейс ІА с классом А и интерфейс ІВ с классом В, потом класс С с наследованием этих интерфейсов, то методы, которые я описал в А и В не надо описывать в С? Или для А и В в одном интерфейсе можно записать методы, а сами классы тоже наследовать от этого интерфейса и потом там описать в каждом классе свои методы?

да, и как быть с конструкторами тих классов?
0
51 / 38 / 5
Регистрация: 14.01.2012
Сообщений: 127
29.03.2013, 21:45
Цитата Сообщение от SlavaStas Посмотреть сообщение
то методы, которые я описал в А и В не надо описывать в С?
Надо
0
5 / 5 / 0
Регистрация: 28.02.2013
Сообщений: 121
29.03.2013, 21:47  [ТС]
nrv, смысл тогда от этих классов и интерфейса, если не нужно их прямое использование в программе?
0
51 / 38 / 5
Регистрация: 14.01.2012
Сообщений: 127
29.03.2013, 22:06
В этой не нужно. Вообще нужно для того чтобы использовать вытекающий из этой иерархии полиморфизм.
Т.е. , например, можно типом параметра в методе указать интерфейс.
Избитые коллекции - хороший пример, т.к со всеми ними мы работает примерно одинаково, но устроены они по разному
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.03.2013, 22:06
Помогаю со студенческими работами здесь

Множественное наследование наоборот
Есть один класс(ClassA). При этом нужно,чтобы ОЧЕНЬ большое количество классов было унаследовано от ClassA(ClassB,ClassC,ClassD...). Можно...

Реализовать множественное наследование
У меня есть классы: студент, студент-дипломник(4, 6 курс), преподаватель, проверка диплома на скачивание, комиссия. Классы преподаватель,...

Множественное наследование альтернатива
есть класс адрес, который содержит статические списки городов, улиц и поля - номера города, улицы и свойства доступа(которые возвращают...

Множественное наследование и дружественные классы
Нуждаюсь в помощи. Базовые классы: Птица (крылья, скорость), Лошадь (цвет, кличка). Класс-наследник: Пегас. Дружественность: класс...

Множественное наследование двух класов
Привет всем, можете пожалуйста объяснить как сделать множественное наследование двух классов. В интернете я находил для интерфейсов, для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru