Вопрос по constructor, c# – Что означает это двоеточие (:)?

35

Перед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;
            }
        }


    }
}
MSDN описывает использование базы и ключевых слов для конструкторов здесь:msdn.microsoft.com/en-us/library/ms173115(VS.80).aspx rmoore
Увидетьstackoverflow.com/questions/338398/… Rob Kennedy
А также посмотримyoda.arachsys.com/csharp/constructors.html RichardOD

Ваш Ответ

7   ответов
2

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

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

1

: base () & quot; для цепочки вызова конструктора по базовому типу.

52

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

Следовательно:

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

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

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

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

7 лет спустя .... Кажется, что это будет использование перегрузки метода в случае использованияthis, это правильно? Если да, можете ли вы привести пример варианта использования?
Что вы подразумеваете подbase class? Вы имеете в виду это:msdn.microsoft.com/en-us/library/… ? Я новичок, поэтому, пожалуйста, будьте конкретны в своем ответе :)
12

: this call будет цепляться к ctor, который соответствует подписи.

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

public ListNode(object dataValue)

звонит

public ListNode(object dataValue, ListNode nextNode)

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

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

«Вызываемый ctor выполняется до»: вот почему в моих приложениях WinForms я перегружаю конструктор и в результате получаю InitializeComponent () в конструкторе со всеми параметрами. Конструктор по умолчанию вызовет перегрузку и передаст аргументы по умолчанию. Обычно я получаю цепочку из (0 параметров) - & gt; Call- & gt; (1 param) - & gt; Calls & gt; (2 params) - & etc & gt; (большинство параметров). Предоставляя пустые ctors типа & quot; MainForm (): this (1, null) {} & quot; Я получаю не очень много времени и спасаю себя от повторения кода в конструкторах. Бонус.
8

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

1

ами перед выполнением тела текущего конструктора.

Я думаю, вы думаете о C ++. Это C #.
Doh. Вот что происходит, когда мой взгляд на теги слишком быстр.
Могу ли я предложить либо отредактировать часть C ++ (которая все еще немного сбивает с толку разработчика C #), либо удалить ответ?
Удалена часть о списках инициализации C ++.
5

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

Похожие вопросы