我有这段代码:
public class Time2
{
private int hour;
private int minute;
private int second;
public Time2(int h = 0, int m = 0, int s = 0)
{
SetTime(h, m, s);
}
public Time2(Time2 time)
: this(time.hour, time.Minute, time.Second) { }
public void SetTime(int h, int m, int s)
{
Hour = h;
Minute = m;
Second = s;
}
除了这一部分我理解了所有内容:
public Time2(Time2 time)
: this(time.hour, time.Minute, time.Second) { }
你能告诉我这个构造函数是如何工作的吗? “this”关键字的风格和工作对我来说看起来很陌生。感谢。
答案 0 :(得分:5)
this
在执行它自己的函数代码之前正在调用该类的另一个构造函数。
试试这个:并查看控制台中的输出。
public Time2(int h = 0, int m = 0, int s = 0)
{
Console.Log("this constructor is called");
SetTime(h, m, s);
}
public Time2(Time2 time)
: this(time.hour, time.Minute, time.Second)
{
Console.Log("and then this constructor is called after");
}
答案 1 :(得分:4)
这称为constructor chaining,并在执行该构造函数中的代码之前调用该特定构造函数。
你也可以使用:base
来调用基类中的相关构造函数(如果你的类扩展了任何东西)
答案 2 :(得分:1)
此构造函数将使用给定Time2
实例中的数据调用第一个构造函数。
Time2 TwoHours = new Time2(2, 0, 0);
TwoHours.SetTime(0, 120, 0);
Time2 2Hours = new Time2(TwoHours);
// 2Hours will have 0 Hours, 120 Min and 0 Seconds