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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2016, 08:40   #1
Pandasama
Новичок
Джуниор
 
Регистрация: 10.10.2016
Сообщений: 1
По умолчанию Добавление свойств в базовый класс

Товарищи, подскажите, как в приличном обществе принято решать такую задачу:

Имеем, например, такую иерархию классов
Код:
class A_Base
{
  int x;
  int y;
  
  public A_Base(int x, int y) 
  { 
    this.x = x;
    this.y = y;
  }
}
 
class A_First : A_Base
{
  string name;
  
  public A_First(int x, int y, string name):base(x,y) 
  { 
    this.name = name; 
  }
}
 
class A_Second : A_First
{
  string surname;
  
  public A_Second(int x, int y, string name, string surname):base(x,y,name)
  {
    this.surname = surname;
  }
}
Теперь нам понадобилось в A_Base добавить ещё одно свойство (и соответственно, инициализировать его в конструкторе)
Код:
class A_Base
{
  int x;
  int y;
  int z;
  
  public A_Base(int x, int y, int z) 
  { 
    this.x = x;
    this.y = y;
    this.z = z;
  }
}
Значит придется во всей иерархии классов менять определение конструктора, дописывая туда новый параметр z, хотя сами эти конструкторы мы не меняем - меняем только вызов родителя. И как-то это не очень хорошо.
Код:
class A_First : A_Base
{
  string name;
  
  public A_First(int x, int y, int z, string name):base(x,y,z) 
  { 
    this.name = name; 
  }
}
Как у продвинутых ООП-товарищей принято поступать в подобных случаях?
Заводить отдельный класс/структуру, которая будет параметром для конструктора?
Код:
class A_Init
{
  int x;
  int y;
  int z;
}
 
class A_Base
{
  int x;
  int y;
  int z;
  
  public A_Base(A_Init init) 
  { 
    this.x = init.x;
    this.y = init.y;
    this.z = init.z;
  }
}
или есть ещё какой-нибудь хитрый паттерн?
Pandasama вне форума Ответить с цитированием
Старый 10.10.2016, 09:15   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Дык если надо задать значение, то в любом случае всем классам придется его принимать.

А если оно опциональное, то можно просто 2 конструктора сделать.

Цитата:
Сообщение от Pandasama Посмотреть сообщение
Как у продвинутых ООП-товарищей принято поступать в подобных случаях?
стараться не создавать большие иерархии/не использовать наследование для всего подряд?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 10.10.2016 в 09:21.
Alex11223 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Базовый класс - предок manchester_alan Общие вопросы Delphi 10 18.04.2015 15:31
C++ Создать базовый класс список the_faceless Помощь студентам 1 17.02.2014 10:02
Создать абстрактный базовый класс C++ MicRaiS Общие вопросы C/C++ 3 11.06.2012 13:14
Создать базовый класс sT1mfy Общие вопросы Delphi 3 11.06.2010 21:38