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

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

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

Восстановить пароль

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

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

На первый взгляд наследование, по сути, не сложная тема, но, тем не менее, есть некоторые моменты, которые я пока что не понял. Конструктор дочернего класса, как правило, выполняется после конструктора непосредственно базового к нему класса. Как я понимаю, всегда в параметрах производного класса прописываются все параметры, которые имеются в базовом классе и по цепочке вверх, до самого базового. Так вот. Если конструктор базового непосредственно можно задать, хотя бб набором параметров. То как можно задать конструктор выше по цепочке? Имею ввиду базового для базового дочернего? и тд...
Ведь не всегда нужно формировать класс с параметрами по умолчанию предыдущих классов.
hoz вне форума Ответить с цитированием
Старый 02.02.2015, 22:59   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Непонятно что вы хотите. Вызвать конструктор не "parent", a "grandparent"? Смысл какой? Его ж и так вызовет parent.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 02.02.2015, 23:03   #3
hoz
Форумчанин
 
Аватар для hoz
 
Регистрация: 29.06.2013
Сообщений: 132
По умолчанию

Производный класс вызовет конструктор класса "parent", а "parent" в свою очередь вызовет дефолтный конструктор класса "grandparent", так? А если надобно, чтоб класс "grandparent" вызван был с кнструктором не по умолчанию, а каким-то канкретным?
hoz вне форума Ответить с цитированием
Старый 02.02.2015, 23:07   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну видимо parent тогда должен был иметь конструктор, который вызывает нужный конструктор grandparent.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 02.02.2015, 23:23   #5
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

Цитата:
чтоб класс "grandparent" вызван был с кнструктором не по умолчанию, а каким-то канкретным?
:base(....) это?
lomastr_ вне форума Ответить с цитированием
Старый 03.02.2015, 00:42   #6
hoz
Форумчанин
 
Аватар для hoz
 
Регистрация: 29.06.2013
Сообщений: 132
По умолчанию

Цитата:
Сообщение от lomastr_ Посмотреть сообщение
:base(....) это?
Так заставляем выполнится конструктор базового класса. Но какой из них не указываем.
hoz вне форума Ответить с цитированием
Старый 03.02.2015, 01:33   #7
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

как это не указываем?
lomastr_ вне форума Ответить с цитированием
Старый 03.02.2015, 19:32   #8
hoz
Форумчанин
 
Аватар для hoz
 
Регистрация: 29.06.2013
Сообщений: 132
По умолчанию

Цитата:
Сообщение от lomastr_ Посмотреть сообщение
как это не указываем?
Объясню на конкретном примере. Есть, например, 3 класса:
- Base (Самый основной класс)
- Second (Производный от класса Base)
- Third (Производный от класса Second)

Допустим, есть такой расклад:
PHP код:
class Base
{
 
// Пользовательский конструктор №1
 // Пользовательский конструктор №2
...
 
// Дефолтовый конструктор класса
 
public void Base (Перечень параметров) { }

Если Second наследник от Base, то будет так:
PHP код:
class Second Base(Перечень параметров)
{
 
// Пользовательский конструктор №1
 // Пользовательский конструктор №2
 // Пользовательский конструктор
public Second(перечень параметров) : Base(Список аргументов) {
// Тело конструктора
 
}
...
 
// Дефолтовый конструктор класса
 
public void Second(Перечень параметров) { }

В данном случае, если рассмотреть конструктор:
PHP код:
public Second(перечень параметров) : Base(Список аргументов) {
// Тело конструктора
 

Становится очевидно, что конструктор непосредственно базового класса т.е. класса Base выберится от порядка и количества, а так же типа аргументов в месте Base(Список аргументов).

Если Third наследник от Second, то будет так:
PHP код:
class Third Second(Перечень параметров)
{
 
// Пользовательский конструктор №1
 // Пользовательский конструктор №2
 // Пользовательский конструктор
public Third(перечень параметров) : Second(Список аргументов) {
// Тело конструктора
 
}
...
 
// Дефолтовый конструктор класса
 
public void Third(Перечень параметров) { }

Тут чутка иная ситуация. Ведь мы может только задать выполнение базового класса Third, а это, непосредственно, Second опять же через параметры.
Но с каким конструктором будет инициализироваться класса Base? Ведь он самый базовый. Но не непосредственно.
hoz вне форума Ответить с цитированием
Старый 03.02.2015, 22:31   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Странные у вас коментарии. Какой ж это дефолтный если с параметрами, да еще и при наличии не дефолтных?

И что вы хотите от конструкторов? В Third вы вызываете конструктор Second, а он вызывает конструктор First.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 04.02.2015, 01:22   #10
hoz
Форумчанин
 
Аватар для hoz
 
Регистрация: 29.06.2013
Сообщений: 132
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Странные у вас коментарии. Какой ж это дефолтный если с параметрами, да еще и при наличии не дефолтных?

И что вы хотите от конструкторов? В Third вы вызываете конструктор Second, а он вызывает конструктор First.
Third вызовет конструктор Second ( Тут можно вызвать конструктор такой, какой нам и нужно). После этого Second вызовет конструктор First. (А вот как тут? Ведь если несколько конструкторов пользовательских у класса First, то задать определённый конструктор не возможно?
Надеюсь я доходчиво объяснил что думаю.
hoz вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с конструктором igor17 Общие вопросы C/C++ 13 15.05.2011 22:23
Сводная таблица с суммированием по конкретным ячейкам de-dimko Microsoft Office Excel 3 11.08.2010 14:17
Позиционирование текста над конкретным местом другой строки RuZ HTML и CSS 0 29.07.2010 18:01
Помогите с конструктором girkoff Общие вопросы C/C++ 10 01.11.2009 16:01