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

Вызвать метод cofee.GetDescription() переопределенный классом Milk

06.11.2014, 22:21. Показов 1259. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите, пожалуйста. Хочу вызвать метод cofee.GetDescription() переопределенный классом Milk, но никак не могу это сделать...

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
 
    abstract public class Beverage
    {
        protected String description = "Unknown";
        public virtual string GetDescription()
        {
            return description;
        }
    }
 
    public class Espresso : Beverage
    {
        public Espresso() { description = "Espresso"; }
    }
 
    abstract public class CondimentDecorator : Beverage
    {
        abstract public new string GetDescription();
    }
 
    public class Milk : CondimentDecorator
    {
        Beverage beverage;
 
        public Milk(Beverage beverage)
        {
            this.beverage = beverage;
        }
 
        public override string GetDescription()
        {
            return beverage.GetDescription() + ", milk";
        }
    }
 
    class Program
    {
        static void Main()
        {
            Beverage cofee = new Espresso();
            cofee = new Milk(cofee);
            Console.WriteLine(cofee.GetDescription());
 
            Console.ReadKey();
        }
    }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.11.2014, 22:21
Ответы с готовыми решениями:

Как вызвать переопределенный метод конкретного класса, находящегося в List? (Полиморфизм)
Классы: public class Shape { // A few example members public int X { get; private set; } public...

Вызов метода базового класса игнорируя переопределенный метод в производном классе
Как вызвать метод базового класса игнорируя переопределенный метод в производном классе. PS переопределение метода в производном классе...

Как вызвать метод info в метод Main и с какими параметрами?
я новичок в C#, так что не судите строго.. Я не думаю что это кому-то покажется сложным, но у меня вызывает дикий ступор(( using...

9
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
06.11.2014, 22:22
xa4enok, строки 46-47. Вам что, мало имен, и нельзя назвать переменные по разному?)))
0
0 / 0 / 0
Регистрация: 06.11.2014
Сообщений: 5
06.11.2014, 22:25  [ТС]
эм.. 46-47 ?
0
1167 / 885 / 517
Регистрация: 09.04.2014
Сообщений: 2,101
06.11.2014, 22:29
C#
1
2
3
4
5
6
7
8
static void Main()
    {
        Beverage cofee = new Espresso();
        Milk milk = new Milk(cofee);
        Console.WriteLine(milk.GetDescription());
 
        Console.ReadKey();
    }
0
0 / 0 / 0
Регистрация: 06.11.2014
Сообщений: 5
06.11.2014, 22:36  [ТС]
Я пытаюсь реализовать паттерн Декоратор из книги "Паттерны проектирования". т.е. я в cofee хочу добавить несколько ингридиентов. Cost() отображается корректно и вызывается из унаследованного класса, а GetDescription() вызывается из базового.
C#
1
2
3
4
5
6
7
8
9
10
11
static void Main()
        {
            Beverage cofee = new Espresso();
            cofee = new Milk(cofee);
            cofee = new Milk(cofee);
            cofee = new Milk(cofee);
            cofee = new Milk(cofee);
            Console.WriteLine(cofee.GetDescription()+ " " +cofee.Cost());
 
            Console.ReadKey();
        }
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
06.11.2014, 22:46
Цитата Сообщение от xa4enok Посмотреть сообщение
GetDescription() вызывается из базового.
Естественно. Вы в ссылке базового типа храните объект наследника. Приведите его к типу наследника и вызывайте метод. Но все равно, странная реализация, как мне кажется...
1
0 / 0 / 0
Регистрация: 06.11.2014
Сообщений: 5
06.11.2014, 23:30  [ТС]
Реализовал с помощью интерфейса. Вот только без класса декоратора. В книге написан пример из Java. Java и .Net сильно различаются разве?!

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
    public interface ICondimentDecorator 
    {
        string GetDescription();
        double Cost();
    }
 
    abstract public class Beverage : ICondimentDecorator
    {
        public abstract string GetDescription();
        public abstract double Cost();
    }
 
    public class Espresso : Beverage
    {
        public override string GetDescription() { return "Espresso"; }
        public override double Cost() { return 1.99; }
    }
 
    public class Milk : ICondimentDecorator
    {
        ICondimentDecorator beverage;
 
        public Milk(ICondimentDecorator beverage)
        {
            this.beverage = beverage;
        }
 
        public string GetDescription()
        {
            return beverage.GetDescription() + ", milk";
        }
 
        public double Cost()
        {
            return beverage.Cost() + .20;
        }
    }
 
    public class Sugar : ICondimentDecorator
    {
        ICondimentDecorator beverage;
 
        public Sugar(ICondimentDecorator beverage)
        {
            this.beverage = beverage;
        }
 
        public string GetDescription()
        {
            return beverage.GetDescription() + ", sugar";
        }
 
        public double Cost()
        {
            return beverage.Cost() + .05;
        }
    }
 
    class Program
    {
        static void Main()
        {
            ICondimentDecorator cofee = new Espresso();
            cofee = new Milk(cofee);
            cofee = new Milk(cofee);
            cofee = new Milk(cofee);
            cofee = new Sugar(cofee);
            Console.WriteLine(cofee.GetDescription()+ " " +cofee.Cost());
 
            Console.ReadKey();
        }
    }
0
871 / 721 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
07.11.2014, 15:10
xa4enok,
Немного переделанное под C#
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
    public abstract class Beverage
    {   
        public virtual string Description
        {
            get { return "Unknown beverage";} 
            private set {}
        }
 
        public virtual double Cost { get; private set; }
    }
 
    public abstract class CondimentDecorator : Beverage
    {
        protected Beverage beverage;
    }
 
    public class Espresso : Beverage
    {
        public override string Description
        {
            get { return "Espresso"; }
            private set {}
        }
 
        public override double Cost
        {
            get { return 2.0; }
            private set {}
        }
    }
 
    public class Milk : CondimentDecorator
    {
        public Milk(Beverage beverage)
        {
            this.beverage = beverage;
        }
 
        public override double Cost
        {
            get { return 0.2 + beverage.Cost; }
            private set {}
        }
 
        public override string Description
        {
            get { return beverage.Description + ", Milk"; }
            private set {}
        }
    }
 
    internal class Program
    {
        public static void Main(string[] args)
        {
            Beverage coffee = new Espresso();
            CondimentDecorator milkAdd = new Milk(coffee);
 
            Console.WriteLine(milkAdd.Description);
            Console.WriteLine(milkAdd.Cost);
        }
    }
0
0 / 0 / 0
Регистрация: 06.11.2014
Сообщений: 5
07.11.2014, 23:41  [ТС]
XRoy, А, что если мне нужно несколько ингридиентов добавить ? cofee - это "главный объект" мы должны добавлять в него ингридиенты, а вы, получается, добавили кофе в молоко, а не молоко в кофе.
0
871 / 721 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
08.11.2014, 02:07
xa4enok,
Я вам сделал как описано в книге, там как раз добавки декорируются
Если нужно декорировать напиток, то создайте список добавок в нем
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.11.2014, 02:07
Помогаю со студенческими работами здесь

Метод getDescription()
Помогите решить задачку : В интерфейс Family добавить метод getDescription(), который возвращает строку (string) в которой идет...

Переопределенный метод Invite
Вот у меня дана лабораторная: Постановка задачи: 1. Вычислить значение арифметического выражения для следующих типов данных: ...

Передача параметров в переопределенный метод
Доброго времени суток. Для передачи параметров в метод мне пришлось его переопределить. Всё вроде бы ничего, но осталась ошибка,...

Pure virtual function call (не видит переопределенный метод)
Здравствуйте. Имеется базовый класс Cars и унаследованные от него классы Jeep, Hatchback, Sedan //Cars.h class Cars { public: ...

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru