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

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


    }
}
Run Code Online (Sandbox Code Playgroud)

Jef*_*tes 53

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

因此:

public ListNode(object dataValue)
    : this(dataValue, null)
{
}
Run Code Online (Sandbox Code Playgroud)

有效地变成:

public ListNode(object dataValue)
{
    data = dataValue;
    next = null;
}
Run Code Online (Sandbox Code Playgroud)

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


Qui*_*son 12

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

所以在这种情况下

public ListNode(object dataValue)
Run Code Online (Sandbox Code Playgroud)

正在打电话

public ListNode(object dataValue, ListNode nextNode)
Run Code Online (Sandbox Code Playgroud)

使用null作为第二个param via : this(dataValue, null)

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

  • "ctor被调用之前执行":这就是为什么在我的WinForms应用程序中,我重载构造函数,并在构造函数中使用所有参数结束InitializeComponent().默认构造函数将调用重载,并传递默认参数.通常我会结束一个(0参数) - >调用 - >(1参数) - >调用 - >(2参数) - >等 - >(大多数参数)链.通过提供像"MainForm()这样的空ctors:this(1,null){}"我最终没有太多开销,并且避免在构造函数中重复代码.奖金. (2认同)

Otá*_*cio 9

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


ope*_*dog 6

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