web-dev-qa-db-ja.com

このコロン(:)はどういう意味ですか?

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


    }
}
37
Ken

これは(thisキーワードとともに)、それ自体が実行される前に、同じ型内の別のコンストラクターを呼び出すようにコンストラクターに指示しています。

したがって:

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

効果的に:

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

baseの代わりにthisを使用して、基本クラスのコンストラクターを呼び出すようにコンストラクターに指示できることに注意してください。

53
Jeff Yates

これはコンストラクターチェーンであるため、後続の_: this_呼び出しを伴うコンストラクターは、署名に一致するctorにチェーンします。

したがって、この例では

_public ListNode(object dataValue)
_

呼んでいる

_public ListNode(object dataValue, ListNode nextNode)
_

: this(dataValue, null)を介して2番目のパラメータとしてnullを使用

コロンを介して呼び出されたctorは、オブジェクトを初期化するために呼び出されたctorの前に実行されることにも注意してください。

12

これは、本体を実行する前に、objectパラメーターとListNodeパラメーターを使用してコンストラクターを実行することを意味します。

9
Otávio Décio

他のListNodeコンストラクターを呼び出します。 baseキーワードを使用して同様のことを行い、派生元のクラスのコンストラクターを呼び出すことができます。

6
opedog

いいえ。これにより、新しいコンストラクターの本体を実行する前に、既存のコンストラクターのオーバーロード(2つのパラメーターを持つもの)を実行できます。

これは、複数のコンストラクターオーバーロードでコンストラクターコードを再利用する最も簡単な方法です。

3
Groo

コードは、現在のコンストラクターの本体が実行される前に、指定された引数を使用して実行するように他のコンストラクターに指示しています。

2
Jeff L

コンストラクタチェーン引数。基本型のコンストラクターへの呼び出しを連鎖させるための「:base()」もあります。

2
justin.m.chase