这个冒号(:)是什么意思?

时间:2009-07-01 20:17:50

标签: c# constructor constructor-chaining

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;
            }
        }


    }
}

7 个答案:

答案 0 :(得分:52)

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

因此:

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

有效地成为:

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

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

答案 1 :(得分:12)

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

所以在这个例子中

public ListNode(object dataValue)

正在调用

public ListNode(object dataValue, ListNode nextNode)

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

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

答案 2 :(得分:8)

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

答案 3 :(得分:5)

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

答案 4 :(得分:2)

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

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

答案 5 :(得分:1)

代码告诉其他构造函数在执行当前构造函数的主体之前使用提供的参数执行。

答案 6 :(得分:1)

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