: этот (нечто) синтаксис в конструкторах C#?

16
задан Jack 10 November 2012 в 23:15
поделиться

7 ответов

Вы в основном правы. this() вызовы конструктор на текущем экземпляре, base() вызовы конструктор супертипа на текущем экземпляре. Они обычно используются для обработки перегрузок конструктора, таким образом, можно добавить дополнительные опции, не выламывая вещи в отдельный метод.

19
ответ дан 30 November 2019 в 15:38
поделиться

Ваше инстинктивное чувство является правильным. Синтаксис используется для вызова перегруженных конструкторов в том же классе:

public class Test
{
    public Test() : this("Called from default constructor") { }
    public Test(String msg)
    {
        Console.WriteLine(msg);
    }
}

следующий код:

public static void Main(String[] args)
{
    Test t1 = new Test();
    Test t2 = new Test("Called from Main function");
}

Выводы следующий

Called from default constructor
Called from main function

Точно так же : base(someParams) используется для вызова основных конструкторов.

19
ответ дан 30 November 2019 в 15:38
поделиться

Вы правы.

: основа (...) вызовы конструктор базового класса.

: это (...) вызовы другой конструктор класса определения. Большую часть времени это работает просто фасадом.

4
ответ дан 30 November 2019 в 15:38
поделиться

Каждый конструктор в классе.NET удостоверяется, что конструктора в классе, которому он наследовался, также вызывают.

Поэтому, если у Вас есть следующие классы:

public class Base { }
public class Something : Base { }
public class Else : Something { }

тогда конструктор в Еще, вызовет конструктора в Чем-то, которое также вызовет конструктора в Основе.

конструктор, вызванный в базовом классе (т.е. тот Вы убываете от), всегда является конструктором без параметров.

, Если Вы не имеете один или хотите переопределить это, можно переопределить его путем определения основы (некоторые параметры здесь). Это выберет правильного конструктора в базовом классе.

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

я надеюсь, что это было понятно.

3
ответ дан 30 November 2019 в 15:38
поделиться

Точно. Вызов это Конструктор, Объединяющий в цепочку и это используется для обхождения того, что C# не имеет способности сделать параметры по умолчанию.

Это используется много в МОК.

2
ответ дан 30 November 2019 в 15:38
поделиться

Это похоже на это, если я не ошибаюсь:

public MyClass(SomeArg arg) : this(new SomethingElse(), arg)

будет звонить

public MyClass(SomethingElse arg, SomeArg arg1) : base or this or nothing

, и это продолжится, пока Вы не получили основу или ничто.

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

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

после использования this(....), тогда конструктор, соответствующий параметрам, будет использоваться, и его тело будет выполняться - дополнительно к телу конструктора, использовавшего this(....).

2
ответ дан 30 November 2019 в 15:38
поделиться

Да Вы правы. Этот синтаксис используется для имения конструкторов подкласса для явного вызова соответствующего пользовательского конструктора базового класса, а не значения по умолчанию. Это ключевое слово в Вашем вопросе объяснено:

Другое использование этого ключевого слова должно вынудить одного конструктора назвать другого для предотвращения избыточной членской логики инициализации.

в Pro C# 2005 и.NET 2.0 Платформы, 3-й Выпуск Andrew Troelsen

2
ответ дан 30 November 2019 в 15:38
поделиться
Другие вопросы по тегам:

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