Порядок выполнения конструктора C#

Я обсудил этот вопрос на дискуссионных группах мерзавца и пришел к заключению, что в это время, существует никакой согласовано метод централизованного захвата файла для мерзавца.

116
задан Stephen Kennedy 14 February 2018 в 20:17
поделиться

5 ответов

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

  • Переменные-члены инициализируются значениями по умолчанию для всех классов в иерархии

Затем, начиная с самого производного класса:

  • Инициализаторы переменных выполняются для наиболее производный тип
  • Цепочка конструкторов определяет, какой конструктор базового класса будет вызываться
  • Базовый класс инициализируется (рекурсивно все это :)
  • Выполняются тела конструкторов в цепочке в этом классе ( обратите внимание, что их может быть несколько, если они связаны с Foo (): this (...) и т.д.

Обратите внимание, что в Java базовый класс инициализируется до ] запускаются инициализаторы переменных.Если вы когда-нибудь переносите какой-либо код, это важное различие, о котором нужно знать:)

У меня есть страница с более подробной информацией , если вам интересно.

162
ответ дан 24 November 2019 в 02:15
поделиться

Сначала он вызовет базовый конструктор. Также имейте в виду, что если вы не поместите : base (param1) после конструктора, будет вызван пустой конструктор базы.

48
ответ дан 24 November 2019 в 02:15
поделиться

Первым вызывается конструктор базового класса.

12
ответ дан 24 November 2019 в 02:15
поделиться

Ваш вопрос немного неясен, но я предполагаю, что вы хотели спросить следующее

Когда мне вызывать базовый конструктор для моего объекта XNA или использовать конструктор по умолчанию impilict

Ответ на этот вопрос сильно зависит как от вашего сценария, так и от базового объекта. Не могли бы вы пояснить следующее

  • Каков сценарий
  • Какой тип базового объекта TerrainCollision ?

Мой лучший ответ - это в случае, когда у вас есть параметры, которые совпадают с параметрами конструктора базового класса, вы почти наверняка должны его вызывать.

0
ответ дан 24 November 2019 в 02:15
поделиться

[Edit: за время, которое потребовалось мне, чтобы ответить, вопрос полностью изменился].

Ответ заключается в том, что он сначала вызывает базу.

[Исходный ответ на старый вопрос ниже]

Вы спрашиваете, когда вы будете выполнять «базовый» бит вызова конструктора?

Если да, вы бы «связали» вызов с базовым конструктором, если класс является производным от другого класса, который имеет этот конструктор:

  public class CollisionBase
    {
        public CollisionBase(Body body, GameObject entity)
        {

        }
    }

    public class TerrainCollision : CollisionBase
    {
        public TerrainCollision(Body body, GameObject entity)
            : base(body, entity)
        {

        }
    }

В этом примере TerrainCollision является производным от CollisionBase . Связывая конструкторы таким образом, он гарантирует, что указанный конструктор вызывается в базовом классе с предоставленными параметрами, а не в конструкторе по умолчанию (если он есть в базе)

1
ответ дан 24 November 2019 в 02:15
поделиться
Другие вопросы по тегам:

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