инициализация члена внутри или снаружи конструктора - PullRequest
4 голосов
/ 16 декабря 2010

Какая из двух инициализаций лучше?

public class ServiceClass
{
    private DataManager dataManager = new DataManager();
    private Dictionary<string, string> stringDictionary = new Dictionary<string, string>();
    private Dictionary<string, DateTime> timeDictionary = new Dictionary<string, DateTime>();
    public ServiceClass()
    {
        //other object creation code
    }
}

ИЛИ

public class ServiceClass
{
    private DataManager dataManager;
    private Dictionary<string, string> stringDictionary;
    private Dictionary<string, DateTime> timeDictionary;
    public ServiceClass()
    {
       dataManager = new DataManager();
       stringDictionary = new Dictionary<string, string>();
       timeDictionary = new Dictionary<string, DateTime>();
       //other object creation code
    }
}

Ответы [ 2 ]

4 голосов
/ 16 декабря 2010

Я бы предпочел использовать конструктор.

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

Кроме того, он гарантирует, что вся логика инициализации соответствующим образом сгруппирована вместе, а не потенциально разбросана по всему коду (где бы вы ни хотели определить свои переменные поля).

2 голосов
/ 16 декабря 2010

Поскольку у вас есть другой код («другой код создания объекта») в явном конструкторе, я бы предпочел поместить туда всю инициализацию.

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