`this` and a class constructor
我现在有一个类,我对它的构造函数有点困惑。
1 2 3 4 | public class BarListTracker : GotTickIndicator { public BarListTracker(BarInterval interval) : this(new BarInterval[] { interval }) { } } |
这句话是什么意思?
这是构造函数链接。本质上,在执行该构造函数的内容之前,您正在调用另一个构造函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public class Foo { public Foo() : this("Hello") { Console.Write(" World!"); } public Foo(string text) { Console.Write(text); } } new Foo(); //outputs"Hello World!" |
因此,在您的
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class BarListTracker : GotTickIndicator { public BarListTracker(BarInterval interval) : this(new BarInterval[] { interval }) { //specific initialization for this constructor } public BarListTracker(BarInterval[] intervals) { //shared initialization logic for both constructors } } |
它将执行主体
这通常用于减少代码重复。如果您的
此外,它允许您使用基本表达式传入或修改输入参数。因此,在本例中,为了与调用
这意味着对
1 |
相当于:
这意味着当这个类被调用并将值作为一个
这是非常常见的,因为您希望以多种不同的方式访问一个类,在这种情况下,他们似乎希望能够在不在代码中设置数组的情况下,一次只发送一个对象。
但是,他们可以做的一件事就是更改另一个构造函数,用
1 | public BarListTracker(params BarInterval[] interval) |
他们甚至不需要第二个构造函数。这是一个更清洁的解决方案,在任何地方都会产生相同的结果。另一个构造函数仍然得到一个数组,如果需要,甚至可以向它传递一个数组:
1 2 |
但是,你也可以通过一个:
1 |
如果你有能力这样做,我建议你。
需要注意的一点是,
调用此类中的另一个构造函数,如下所示:
1 | public BarListTracker(BarInterval[] intervals) |
例如,它调用同一类的另一个构造函数
1 2 3 4 5 6 7 8 | public class Point{ public Point(int x, int y){ this.x=x; this.y=y; } public Point():this(0,0){} } |
如果在你的代码里你打电话
1 |
您将使用定义的无参数构造函数,该构造函数将使用传递给它的参数0,0来调用构造函数。
如果有多个构造函数接受大量参数,并希望为更简单的构造函数提供默认参数,那么这非常有用。
它被称为构造函数链接公共barlistracker(barinterval interval):this(new barinterval[]interval)此关键字用于为构造函数设置链接,即初始化顺序在上面的例子中,您是在初始化barinterval值之前初始化数组元素,即间隔值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class BarListTracker { public BarListTracker(BarInterval interval) : this(new BarInterval[] { interval })//Constructor II { //call after BarListTracker(BarInterval[] barIntervals) } public BarListTracker(BarInterval[] barIntervals)//Constructor I { //call first } } |
您将拥有另一个以barinterval数组为参数的构造函数。这基本上只是从另一个构造函数调用一个构造函数。另一个可能有用的链接是从另一个构造函数调用一个构造函数