39

关键字之前this是一个冒号。谁能解释冒号在这种情况下的含义?我不相信这是遗传。

谢谢

using System;

namespace LinkedListLibrary
{
    class ListNode
    {
        private object data;
        private ListNode next;

        public ListNode(object dataValue)
            : this(dataValue, null)
        {
        }

        public ListNode(object dataValue, ListNode nextNode)
        {
            data = dataValue;
            next = nextNode;
        }

        public ListNode Next
        {
            get
            {
                return next;
            }
            set
            {
                next = value;
            }
        }
        public object Data
        {
            get
            {
                return data;
            }
        }


    }
}
4

7 回答 7

55

它(连同this关键字)指示构造函数在它自己执行之前调用同一类型中的另一个构造函数。

所以:

public ListNode(object dataValue)
    : this(dataValue, null)
{
}

有效地变成:

public ListNode(object dataValue)
{
    data = dataValue;
    next = null;
}

请注意,您可以使用base而不是this指示构造函数调用基类中的构造函数。

于 2009-07-01T20:19:20.387 回答
13

它是构造函数链接,因此具有后续: this调用的构造函数将链接到与签名匹配的 ctor。

所以在这种情况下

public ListNode(object dataValue)

正在打电话

public ListNode(object dataValue, ListNode nextNode)

以 null 作为第二个参数 via: this(dataValue, null)

还值得注意的是,通过冒号调用的 ctor 在被调用以初始化对象的 ctor 之前执行。

于 2009-07-01T20:19:15.833 回答
9

这意味着在运行主体之前,使用对象和 ListNode 参数运行构造函数。

于 2009-07-01T20:19:38.467 回答
6

它调用另一个 ListNode 构造函数。您可以使用 base 关键字执行类似的操作来调用您派生的类的构造函数。

于 2009-07-01T20:19:48.390 回答
4

不,这使您能够在执行新构造函数的主体之前执行现有的构造函数重载(具有两个参数的构造函数)。

这是在多个构造函数重载中重用构造函数代码的最简单方法。

于 2009-07-01T20:20:00.107 回答
2

该代码告诉另一个构造函数在执行当前构造函数的主体之前使用提供的参数执行。

于 2009-07-01T20:24:22.483 回答
2

构造函数链参数。还有 ":base()" 用于链接对基类型上的构造函数的调用。

于 2009-07-01T20:48:50.780 回答