Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2015, 20:25   #1
hoz
Форумчанин
 
Аватар для hoz
 
Регистрация: 29.06.2013
Сообщений: 132
По умолчанию Ключевое слово base

Какую роль играет ключевое слово base ?
В книге Эндрю Троелсена имеется в приложение такой момент:
Код:
namespace Employees
{
    // Managers need to know their number of stock options.
    class Manager : Employee
    {
        public int StockOptions { get; set; }

        public Manager( string fullName, int age, int empID,
                       float currPay, string ssn, int numbOfOpts )
            : base(fullName, age, empID, currPay, ssn)
        {
            // This property is defined by the Manager class.
            StockOptions = numbOfOpts;
        }

        public Manager(){}

        public override void GiveBonus( float amount )
        {
            base.GiveBonus(amount);
            Random r = new Random();
            StockOptions += r.Next(500);
        }

        public override void DisplayStats()
        {
            base.DisplayStats();
            Console.WriteLine("Number of Stock Options: {0}", StockOptions);
        }

    }
}
Тут есть поле:
Код:
base.DisplayStats();
Как это правильно читается?
В конструкторах base применяется, что б изначально вызвать конструктор базового класса, а тут что?

Последний раз редактировалось Stilet; 27.09.2015 в 20:31.
hoz вне форума Ответить с цитированием
Старый 27.09.2015, 20:32   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
а тут что?
Что бы вызывать метод DisplayStats() самого предка.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.09.2015, 23:54   #3
hoz
Форумчанин
 
Аватар для hoz
 
Регистрация: 29.06.2013
Сообщений: 132
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Что бы вызывать метод DisplayStats() самого предка.
Т.е. можно его и не вызыватЬ? Как я понял, в данном случает его вызывают, чтоб не дублировать код вызываемого метода. На выходе будет переопределённый метод в котором будет то, что вызвали + то что ещё добавлено ниже base.ИМЯ ВЫЗЫВАЕМОГО МЕТОДА.
Я верно понимаю?
hoz вне форума Ответить с цитированием
Старый 28.09.2015, 06:49   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Т.е. можно его и не вызыватЬ?
Если не нужно - не вызывай.
Цитата:
в данном случает его вызывают, чтоб не дублировать код вызываемого метода.
Ну не совсем так, но да.
Цитата:
На выходе будет переопределённый метод в котором будет то, что вызвали + то что ещё добавлено ниже base.
Нет. На выходе будет просто вызов метода предка из метода ребенка.
Шарпей ничего никуда добавлять не будет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.09.2015, 01:51   #5
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию

Цитата:
Сообщение от hoz Посмотреть сообщение
Т.е. можно его и не вызыватЬ? Как я понял, в данном случает его вызывают, чтоб не дублировать код вызываемого метода. На выходе будет переопределённый метод в котором будет то, что вызвали + то что ещё добавлено ниже base.ИМЯ ВЫЗЫВАЕМОГО МЕТОДА.
Я верно понимаю?
да
фыдвлаофдвыа (лимит)

Последний раз редактировалось Stilet; 29.09.2015 в 06:34.
rUs_LAN вне форума Ответить с цитированием
Старый 30.09.2015, 00:21   #6
hoz
Форумчанин
 
Аватар для hoz
 
Регистрация: 29.06.2013
Сообщений: 132
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Если не нужно - не вызывай.

Ну не совсем так, но да.

Нет. На выходе будет просто вызов метода предка из метода ребенка.
Шарпей ничего никуда добавлять не будет.
Так а какой резон его вызывать, если виртуальный класс на то он и виртуальный, как я понял, чтоб его переопределить... Смысл его вызывать в потомке?
hoz вне форума Ответить с цитированием
Старый 30.09.2015, 07:36   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от hoz Посмотреть сообщение
Так а какой резон его вызывать, если виртуальный класс на то он и виртуальный, как я понял, чтоб его переопределить... Смысл его вызывать в потомке?
1)чтоб не дублировать код.
когда вам нужно все то что делает метод-предка и еще свое.
2)чтоб вызвать код предка в случае если у него доступа больше.

ну и иногда вам код предка тупо не известен.

переопределение не всегда значит полная замена.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 30.09.2015, 07:55   #8
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ключевое слово this ryouzaki Помощь студентам 1 14.02.2014 03:41
Ключевое слово synchronized и многопоточность pufystyj Общие вопросы по Java, Java SE, Kotlin 2 16.05.2013 23:24
Ключевое слово в с++ Юлия Набиева Помощь студентам 3 12.03.2013 14:36
MSVC++: ключевое слово operator Пепел Феникса Общие вопросы C/C++ 2 20.10.2009 21:32