Что означает эта двоеточие (:)?
До 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;
}
}
}
}
Ответы
Ответ 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()" для привязки вызова к конструктору базового типа.