理解构造函数

时间:2014-06-14 08:17:57

标签: c# constructor

我有这段代码:

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”关键字的风格和工作对我来说看起来很陌生。感谢。

3 个答案:

答案 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