C#: if a class has two constructors, what is the best way for these constructors to share some code?
本问题已经有最佳答案,请猛点这里访问。
C在VS2005中:如果一个类有两个构造函数,那么这些构造函数共享一些代码的最佳方式是什么?
例如,我怎样才能避免在两个构造器中使用
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; } |
使用
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; } |