Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636

Как наследовать уже наследованный класс?

28.01.2020, 23:49. Показов 1038. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
class Espresso : Coffee
    {
        internal int espresso_coffee { get; set; }
        internal Espresso(int water, int sugar, string cost, int espresso) : base(water, sugar, cost)
        {
            espresso_coffee = espresso;
        }
        public new void Display()
        {
            Console.WriteLine($"{ Water}, {Sugar}, {Cost}, {espresso_coffee} ");
        }
 
    }
Так как в состав кофе входит экспрессо то, американо, лате, капучино и т.д. Нужно наследовать от экспрессо.
Но у меня не выходит
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Americano : Espresso
    {
        private int Milk { get; set; }
        private Americano(int water, int sugar, string cost, int espresso, int milk) : base(water, sugar, cost, espresso_coffee) // тут ошибка Для нестатического поля, метода или свойства "Espresso.espresso_coffee" требуется ссылка на объект.
        {
            Milk = milk;
        }
        public new void Display()
        {
            Console.WriteLine($"{ Water}, {Sugar}, {Cost}, {espresso_coffee} ");
        }
        public void DisplayWithMilk()
        {
            Console.WriteLine($"{ Water}, {Sugar}, {Cost}, {espresso_coffee}, {Milk} ");
        }
 
    }
Я не понимаю как это исправить, помогите пожалуйста. И правльно ли я вообще наследую уже наследуюмый класс?
Если тут выгоднее использовать интрефейс, не могли бы Вы продемонстрировать это на моем классе?)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.01.2020, 23:49
Ответы с готовыми решениями:

Как наследовать класс,находящийся в другом окне?
Добрый вечер. Мне нужно сделать наследование классов, 1 класс находится первой форме, 2 класс во второй. Каким образом можно унаследовать...

Наследованный от DataGridView класс не ловит события изменения
Столкнулся с проблемой. Создал свой клас, унаследовал от DataGridView. Подписался на событие изменения private void...

Как наследовать класс activity
Написал класс activity1 в котором программно создан layout1. Как использовать мой класс в новом создаваемом приложении? какой нужен...

5
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
28.01.2020, 23:52
Цитата Сообщение от Vlast001 Посмотреть сообщение
C#
1
(int water, int sugar, string cost, int espresso, int milk) : base(water, sugar, cost, espresso_coffee)
Посмотрите внимательно на параметры конструктора и аргументы базовому конструктору.
Что есть справа, чего нет слева?
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
28.01.2020, 23:58
C#
1
2
3
4
private Americano(int water, int sugar, string cost, int espresso, int milk) : base(water, sugar, cost, espresso)
{
    Milk = milk;
}
1
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
29.01.2020, 00:16  [ТС]
Даценд, Спасибо большое. А вы не могли объяснить почему espresso, а не espresso_coffee ?
Просто в конечном результате это работает точно так же как если бы я записал так:
C#
1
2
3
4
5
6
7
8
9
10
11
static internal int espresso_coffee { get; set; }
//...
public Americano(int water, int sugar, string cost, int espresso, int milk) : base(water, sugar, cost, espresso_coffee)
//...
static void Main(string[] args)
        {
            Americano americano = new Americano(100, 2, "15$", 20, 70);
            americano.Display();
            americano.DisplayWithMilk();
 
        }
Из-за такой "странности" хочется узнать подробнее как это устроено)
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
29.01.2020, 00:43
Цитата Сообщение от Vlast001 Посмотреть сообщение
это работает точно так же как если бы я записал так:
Не должно так же работать. Статическое свойство espresso_coffee (кстати, принято свойства с прописной буквы именовать) остается неинициализированным, поэтому в конструктор базового класса (а сначала вызывается конструктор базового класса) четвертым параметром передается 0. И не нужно это свойство делать статическим, да и internal здесь зачем, если можно просто public использовать?
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
29.01.2020, 09:05
Цитата Сообщение от Vlast001 Посмотреть сообщение
Если тут выгоднее использовать интрефейс, не могли бы Вы продемонстрировать это на моем классе?)
Интерфейс хорошо использовать, например, при добавлении в класс какого-то "побочного" функционала. А главный функционал - наследовать от базовых классов, чтобы не реализовывать несколько раз. Но, в C#8 есть Default interface implementation, поэтому проблема смягчается - реализацию Вы можете делать раз, а дальше классы будут её наследовать. Но, это вовсе не значит, что о базовых классах следует забыть - их хорошо использовать для "центрального" функционала класса.

Перед Вами часто будет стоять выбор - сделать ли класс и унаследовать ли от него или интерфейс. Помните при этом, что класс базовый может только один, а интерфейсов - несколько. И возможности класса даже в C#8 шире, чем интерфейса (или, правильней, трейта).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.01.2020, 09:05
Помогаю со студенческими работами здесь

Как правильно наследовать класс в с++ builder?
Привет! Есть базовый класс BaseModel: class BaseModel{ protected: int code; UnicodeString name; public: ...

Как наследовать класс от System.Object
Господа, подскажите дураку, как наследовать класс от System.Object? На код: class A : public System.Object{}; выдает ошибку

Как наследовать класс другого проекта?
Как наследовать класс другого проекта

Как наследовать свой класс формы
Всем доброго времени суток. Я создал свой класс унаследованный от класса формы. В нем переопределил Sub OnPaintBackground, нарисовал то,...

Не знаю как создать класс и наследовать от QSerialPort
Подскажите как создать класс и наследовать от QSerialPort что было в одельном сырце и хидоре. В класс входет размер пакета, скорость...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru