Нет, это не возможно. Если Вы используете Отражатель для исследования IL, это сгенерировано для каждого конструктора, Вы будете видеть, почему - Вы закончили бы тем, что вызвали обоих из конструкторов для базового класса. В теории компилятор мог создать скрытые методы для выполнения то, что Вы хотите, но действительно нет никакого преимущества перед Вами делающий то же самое явно.
Я повторно объединил бы конструкторов в цепочку, таким образом, их называют как
Bar() : this(0)
Bar(int) : Foo(int) initializes Bar
Foo(int) initializes Foo
Foo() : this(0)
, Это подходит, если конструкторы без параметров принимают некоторое значение по умолчанию для международного параметра другого конструктора. Если конструкторы не связаны, Вы, вероятно, делая что-то не так с Вашим типом, или возможно нам нужно больше информации о том, что является Вами пытающийся достигнуть.
Это - только вещь, о которой я могу думать...
public class Foo
{
public Foo()
{
}
public Foo(int? arg): this()
{
}
}
public class Bar : Foo
{
private int x;
public Bar(): this(new int?()) // edited to fix type ambiguity
{
// stuff that only runs for paramerless ctor
}
public Bar(int? arg)
: base(arg)
{
if (arg.HasValue)
{
// Do stuff for both parameterless and parameterized ctor
}
// Do other stuff for only parameterized ctor
}
}
Я рекомендовал бы изменить Вашу цепочку конструктора для движения от наименее определенного до самого определенного.
class Foo
{
Foo()
{
// do some stuff
}
Foo(int arg): this()
{
// do some other stuff
}
}
class Bar : Foo
{
Bar() : Bar(0)
{
// some third thing
}
Bar(int arg): base(arg)
{
// something
}
}
Любое создание объекта Панели теперь вызовет все 4 конструкторов. Конструктор, объединяющий в цепочку, должен предоставить значения по умолчанию более определенным конструкторам, не наоборот. Необходимо действительно посмотреть на то, что Вы пытаетесь выполнить и удостовериться, что Вы делаете, имеет смысл. Curt прав, что существуют технические причины, Вы не можете сделать этого, но существуют также логические причины, почему Вы не были должны.
Можно ли поместить материал от Панели () в Панели (интервал) и назвать ли Панель (интервал) с Панелью () со значением по умолчанию? Тогда Панель (интервал) может вызвать основного конструктора.
class Bar : Foo
{
Bar() : this(0)
{
}
Bar(int arg) : base(arg)
{
}
}
, Который точно не отвечает на Ваш вопрос, но в зависимости от Вашего сценария, могло бы быть осуществимое решение.
У разве Вас не может быть конструктора Панели, который берет интервал, вызывают конструктора без параметров?
можно ли взять код инициализации для Панели () и сделать ли его методом и назвать ли его от обоих конструкторов и иметь ли нового конструктора, просто называют основу (аргумент)?