Подтвердить что ты не робот

Что означает эта двоеточие (:)?

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


    }
}
4b9b3361

Ответ 1

Он (вместе с ключевым словом this) инструктирует конструктор для вызова другого конструктора того же типа перед тем, как он сам выполняет.

Таким образом:

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

эффективно становится:

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

Обратите внимание, что вы можете использовать base вместо this, чтобы дать конструктору возможность вызвать конструктор в базовом классе.

Ответ 2

Это цепочка конструкторов, поэтому конструктор с последующим вызовом : this будет привязан к ctor, который соответствует сигнатуре.

Итак, в этом случае

public ListNode(object dataValue)

вызывает

public ListNode(object dataValue, ListNode nextNode)

с нулевым значением как второй параметр через : this(dataValue, null)

также стоит отметить, что ctor, вызываемый через двоеточие, выполняется перед ctor, который был вызван для инициализации объекта.

Ответ 3

Это означает, что перед запуском тела запустите конструктор с параметрами объекта и ListNode.

Ответ 4

Он вызывает другой конструктор ListNode. Вы можете сделать аналогичную вещь с ключевым словом base, чтобы вызвать конструктор класса, из которого вы извлекаете.

Ответ 5

Нет, это позволяет выполнить перегрузку существующего конструктора (тот, у которого есть два параметра), перед выполнением тела нового конструктора.

Это самый простой способ повторного использования кода конструктора при перегрузках нескольких конструкторов.

Ответ 6

Код сообщает другому конструктору выполнить с предоставленными аргументами, прежде чем тело текущего конструктора будет исполнено.

Ответ 7

Аргументы цепочки конструктора. Существует также ": base()" для привязки вызова к конструктору базового типа.