.ctor base vs this
От: vladpol Украина http://vlad-mislitel.livejournal.com/
Дата: 25.05.20 10:00
Оценка:
Всем доброго.
Вышла с коллегой дискуссия:
Есть прмерно такой код
public class B
{
 //...
  B():this(null, null, null)
  {}
  B( int? a):this(a, null, null)
  {}
  B(int? a, int? b):this(a,b,null)
  {}
  B(int? a, double? b, string c)
  {
    //...
  }
} 

public class D:B
{
 //...
  D():base() //this(null, null, null)
  {}
  D( int? a):base(a) //this(a, null, null)
  {}
  D(int? a, int? b):base(a,b) //this(a,b,null)
  {}
  D(int? a, double? b, string c):base(a,b,c)
  {
    //...
  }
}


Вопрос: есть ли принципиальная разница межу вызовами из наследных конструкторов базовых или сведение к одному со многими парметрами. Я считаю, что 100% выигрышного варинта нет, коллега убежден, что едиственно правильный вариант, то чтобы base был только 1, а все остальній конструторі редиректили через this.
Хотелось бы услышать еще мнения.
Спасибо
С уважением, Владислав Полищук
Отредактировано 25.05.2020 10:02 vladpol . Предыдущая версия .
.net c# .ctor
Re: .ctor base vs this
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 25.05.20 10:57
Оценка: +2
Здравствуйте, vladpol, Вы писали:

V> Хотелось бы услышать еще мнения.

В таком коде никакой разницы нет. Если конструкторы непустые, то разница будет.

V> Спасибо

Незачто.
Re: .ctor base vs this
От: karbofos42 Россия  
Дата: 25.05.20 12:51
Оценка:
Здравствуйте, vladpol, Вы писали:

V>Вопрос: есть ли принципиальная разница межу вызовами из наследных конструкторов базовых или сведение к одному со многими парметрами. Я считаю, что 100% выигрышного варинта нет, коллега убежден, что едиственно правильный вариант, то чтобы base был только 1, а все остальній конструторі редиректили через this.

V> Хотелось бы услышать еще мнения.
V> Спасибо

принципиальная разница в том, что будут вызываться разные конструкторы базового класса. Выигрыш собственно зависит от этого.
Ведь есть разница: создать List<> без параметров, а потом записать в него 100 000 элементов или же вызвать конструктор List<int>(100_000) и потом заполнить его теми же элементами.
Так и здесь. Есть вероятность, что одна из реализаций base будет оптимальнее под конкретные условия потомка и лучше вызывать её, а не какой-то общий конструктор.
Если всё в итоге сводится к одному и тому же методу, то конечно лучше всё сводить к вызову this, чтобы при последующем чтении не опускаться на уровень base и шариться в рамках одного класса.
Отредактировано 25.05.2020 12:56 karbofos42 . Предыдущая версия .
Re: .ctor base vs this
От: ksg71 Германия  
Дата: 25.05.20 13:26
Оценка: +2
Здравствуйте, vladpol, Вы писали:


V>Вопрос: есть ли принципиальная разница межу вызовами из наследных конструкторов базовых или сведение к одному со многими парметрами. Я считаю, что 100% выигрышного варинта нет, коллега убежден, что едиственно правильный вариант, то чтобы base был только 1, а все остальній конструторі редиректили через this.

V> Хотелось бы услышать еще мнения.
V> Спасибо

думаю стоит вызывать base() из соответствующего конструктора, если нет веских причин применять telescope pattern в производном.
что там сделано в базовом классе — неясно, есть надежда, что "специализированная" версия зачем то была нужна и возможно она оптимальней,
а что там тоже телескоп без заглядывания в код не ясно.
Das Reich der Freiheit beginnt da, wo die Arbeit aufhört. (c) Karl Marx
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.