У анонимных инициализируются переопределения по умолчанию или они запускаются после? - PullRequest
1 голос
/ 04 октября 2011

Если у меня установлен инициализатор по умолчанию и определите анонимный при создании объекта.Пропускается ли значение по умолчанию или просто выполняется раньше?Причина, которую я хочу знать, заключается в том, что в приведенном ниже случае, если они будут запущены после, объект List, созданный по умолчанию, будет немедленно отброшен, создавая ненужный мусор.

Ответы [ 3 ]

2 голосов
/ 04 октября 2011

В вашем примере кода Padding = 2 встречается до Padding = 5.

. Вы без необходимости создаете List<RectElement>, но я бы предложил вам создать сценарий, в котором такие ненужные выделения приводят к заметной производительности.удар.

1 голос
/ 04 октября 2011

Из спецификации C # , раздел 17.4.5.2

Инициализаторы переменных поля экземпляра класса соответствуют последовательность назначений, которые выполняются сразу после входа в любой из конструкторов экземпляра (§17.10.2) этого класса. инициализаторы переменных выполняются в текстовом порядке, в котором они появляются в объявлении класса. Создание экземпляра класса и Процесс инициализации описан далее в §17.10.

Таким образом, инициализации в объявлении класса тела будут выполняться первыми, а затем инициализации в конструкторе. Это можно наблюдать непосредственно, просматривая выход IL.

1 голос
/ 04 октября 2011

arrangedChildren будет установлен в последний созданный вами экземпляр

например:

arrangedChildren = new List<RectElement>();
arrangedChildren = new List<RectElement>()
   {
      new ButtonToggle(),
      new ButtonToggle()
   }

arrangedChildren будет указывать на второй список. Если ни один другой объект не ссылается на первый, он отключится (GC). Но если кто-то 1 сохранит ссылку на первый экземпляр, он останется в живых, и вы можете иметь дубликаты или два разных списка, над которыми вы работаете.

Это может вызвать некоторые проблемы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...