Подтвердить что ты не робот

При инициализации в конструкторах С#, что лучше: списки инициализаторов или назначение?

Класс A использует список инициализаторов, чтобы установить член в значение параметра, тогда как класс B использует назначение внутри тела конструктора.

Может ли кто-нибудь дать какие-либо основания предпочесть друг другу, если я согласен?

class A
{
    String _filename;

    A(String filename) : _filename(filename)
    {
    }
}


class B
{
    String _filename;

    B(String filename)
    {
        _filename = filename;
    }
}
4b9b3361

Ответ 1

Первый из них не является законным в С#. Единственными двумя элементами, которые могут появиться после двоеточия в конструкторе, являются base и this.

Итак, я бы пошел со вторым.

Ответ 2

Вы имели в виду С++ вместо С#?

Для С++ списки инициализаторов лучше, чем назначение по нескольким причинам:

  • Для типов POD (int, float и т.д.) оптимизатор часто может выполнять более эффективную memcpy за кулисами, когда вы предоставляете инициализаторы для данных.
  • Для не-POD-типов (объектов) вы получаете эффективность, только делая одну конструкцию. При назначении в конструкторе компилятор должен сначала создать свой объект, а затем назначить его отдельным шагом (это относится и к типам POD).