C#:如果一个类有两个构造函数,这些构造函数分享一些代码的最佳方法是什么?

C#: if a class has two constructors, what is the best way for these constructors to share some code?

本问题已经有最佳答案,请猛点这里访问。

C在VS2005中:如果一个类有两个构造函数,那么这些构造函数共享一些代码的最佳方式是什么?

例如,我怎样才能避免在两个构造器中使用x = 5y = 10行,以便:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
2
3
4
5
public MyObject(int setZ)
  : this()
{
  z = setZ;
}


使用this()语法。

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


创建其他方法:

1
2
3
4
private setDefaultNumbers() {
    x = 5;
    y = 10;
}

然后让两个版本的构造函数调用此方法:

1
2
3
4
5
6
7
8
public MyObject() {
    setDefaultNumbers();
}

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


这与你使用方法的方式非常相似。通常你会做如下的事情:

1
2
3
4
5
6
7
8
9
10
public void SetA(int a)
{
    this.a = a;
}

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

对于构造函数,它有特殊的语法:

1
2
3
4
5
6
7
8
9
10
public void MyObject()
{
    this.a = 5;
}

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