С#: если класс имеет два конструктора, каков наилучший способ для этих конструкторов разделить некоторый код?

С# в VS2005: если класс имеет два конструктора, каков наилучший способ для этих конструкторов разделить некоторый код?

например. Как я мог избежать наличия строк x = 5 и y = 10 в обоих конструкторах для следующего:

public class MyObject {

int x;
int y;
int z;

public MyObject() {
    x = 5;
    y = 10;
}

public MyObject(int setZ) {
    x = 5;
    y = 10;
    z = setZ;
}

Ответ 1

Просто цепь для общего конструктора...

public MyObject(int setZ)
  : this()
{
  z = setZ;
}

Ответ 2

Используйте синтаксис this().

public MyObject(int setZ) : this() {
    z = setZ;
}

Ответ 3

Создайте другой метод:

private setDefaultNumbers() {
    x = 5;
    y = 10;
}

Затем обе версии вашего конструктора вызовут этот метод:

public MyObject() {
    setDefaultNumbers();
}

public MyObject(int setZ) {
    setDefaultNumbers();
    z = setZ;
}

Ответ 4

Это очень похоже на то, как вы это делали с помощью методов. Обычно вы делаете что-то вроде:

public void SetA(int a)
{
    this.a = a;
}

public void SetAandB(int a, int b)
{
    this.SetA(a);
    this.b = b;
}

с конструкторами, там есть специальный синтаксис:

public void MyObject()
{
    this.a = 5;
}

public void MyObject(int b)
    : this()
{
    this.b = 10;
}