Инициализация члена в Getter или Constructor - PullRequest
2 голосов
/ 08 марта 2012

Есть ли разница между этими двумя подходами?

В этом подходе я использую метод получения для инициализации DataTable

public DataTable Res
{
    get
    {
        if (Res == null)
        {
            Res = GetDataTable();
        }
        return Res ;
    }
    private set;
}

против

В этом подходе я использую конструктор для инициализации DataTable

public class XYZ
{
    public DataTable Res{ get; private set;}
    //constructor 
    public XYZ()
    {
        Res= GetDataTable();            
    }
}

Эта переменная используется на странице ASP.net для заполнения списка DropDown. Что будет лучше?

Edit: -

Используется в веб-приложении, где данные не изменяются. Я связываю эту таблицу с выпадающим списком в событии Page_Load.

Ответы [ 2 ]

1 голос
/ 08 марта 2012

Вопрос в том, будет ли данный экземпляр класса XYZ всегда нуждаться и использовать DataTable.

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

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

Обратная сторона этого не обязательно применима ввеб-сценарий, но в других приложениях можно было бы подумать, должен ли вызов свойства быть очень отзывчивым, чтобы предотвратить зависание пользовательского интерфейса.Предварительная загрузка данных может быть предпочтительнее в таком сценарии.

1 голос
/ 08 марта 2012

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

Второй метод создает экземпляр объекта, как только вы создаете класс,Недостатком этого является то, что если вы никогда не используете объект, то вы тратите время на создание объекта и память, пока объект был выделен.

...