:this(foo, bar)
- это синтаксический сахар, вы ничего не можете с ним сделать, что вы не можете сделать другими способами.Тем не менее, :base(foo, bar)
не является синтаксическим сахаром, так как это единственный способ вызвать рассматриваемый конструктор во время создания производного класса, особенно учитывая, что сначала у вас должен быть полностью сконструированный базовый класс, который удовлетворяет любым инвариантам, определенным в этомclass (например, если для некоторых из bar
допустимы только некоторые значения foo
, то перед тем, как идти дальше, будет выдано исключение).
Способ работы :base(foo, bar)
позволяет классам использовать инкапсуляцию для обеспечениячто они никогда не переводятся в недопустимое состояние и все же допускают наследование, this(foo, bar)
просто копирует тот же механизм для удобства программиста, когда есть общий код, используемый более чем одним конструктором.
Теперь,скажем, мы решили иметь возможность вызывать :this(foo, bar)
из любого места.По сути, это будет вызов метода.Ну, мы все равно можем сделать это в конструкторе классов.Мы утратили синтаксическое сходство с :base(foo, bar)
(и считаем, что некоторые люди уже знакомы с тем C ++, который снизил их кривую обучения), и просто добавили способ создать угрозу для конструктора, такого как метод, возвращающий пустоту, добавивсложность его проверки лежит в теле конструктора (и приходится иметь дело с людьми, спрашивающими, почему его нельзя вызывать в другом месте, когда теперь это выглядит так, как это возможно, или же странностью позволять это делать), когда людив любом случае можно просто создать такие методы.
В целом, я думаю, это было хорошее дизайнерское решение.