Как я могу использовать несколько конструкторов для удаления дублированного кода при сохранении читабельности?

<code>int a, b, c;

Constructor()
{
    a = 5;
    b = 10;
    c = 15;
    //do stuff
}
Constructor(int x, int y)
{
    a = x;
    b = y;
    c = 15;
    //do stuff
}
Constructor(int x, int y, int z)
{
    a = x;
    b = y;
    c = z;
    //do stuff
}
</code>

Чтобы не допустить дублирования «материала» и нескольких заданий, я попробовал что-то вроде:

<code>int a, b, c;

Constructor(): this(5, 10, 15)
{
}
Constructor(int x, int y): this(x, y, 15)
{
}
Constructor(int x, int y, int z)
{
    a = x;
    b = y;
    c = z;
    //do stuff
}
</code>

Это работает для того, что я хочу сделать, но иногда мне нужно использовать какой-то длинный код для создания новых объектов или сделать некоторые вычисления:

<code>int a, b, c;

Constructor(): this(new Something(new AnotherThing(param1, param2, param3),
    10, 15).CollectionOfStuff.Count, new SomethingElse("some string", "another
    string").GetValue(), (int)Math.Floor(533 / 39.384))
{
}
Constructor(int x, int y): this(x, y, (int)Math.Floor(533 / 39.384))
{
}
Constructor(int x, int y, int z)
{
    a = x;
    b = y;
    c = z;
    //do stuff
}
</code>

Этот код почти такой же, как и раньше, только передаваемые параметры не очень читабельны. Я бы предпочел сделать что-то вроде:

<code>int a, b, c;

Constructor(): this(x, y, z) //compile error, variables do not exist in context
{
    AnotherThing at = new AnotherThing(param1, param2, param3);
    Something st = new Something(aThing, 10, 15)
    SomethingElse ste = new SomethingElse("some string", "another string");

    int x = thing.CollectionOfStuff.Count;
    int y = ste.GetValue();
    int z = (int)Math.Floor(533 / 39.384);

    //In Java, I think you can call this(x, y, z) at this point.
    this(x, y, z); //compile error, method name expected
}
Constructor(int x, int y): this(x, y, z) //compile error
{
    int z = (int)Math.Floor(533 / 39.384);
}
Constructor(int x, int y, int z)
{
    a = x;
    b = y;
    c = z;
    //do stuff
}
</code>

В основном я строю параметры в теле конструктора. Затем я пытаюсь передать эти встроенные параметры другому конструктору. Я думаю, что помню возможность использовать ключевые слова "this" и "super" для вызова конструкторов внутри тела другого конструктора при кодировании в Java. Это не представляется возможным в C #.

Есть ли способ сделать это легко? Я сделал что-то неправильно? Если это невозможно, я должен просто придерживаться нечитаемого кода?

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

Ответы на вопрос(2)

Ваш ответ на вопрос