ключевое слово ref при передаче неинициализированного параметра в метод

Абстрактный базовый класс BindableBase в проекте WinRT определяется следующим образом:

[Windows.Foundation.Metadata.WebHostHidden]
public abstract class BindableBase : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected bool SetProperty<T>(ref T storage, T value, [CallerMemberName] String propertyName = null)
    {
        if (object.Equals(storage, value)) return false;

        storage = value;
        this.OnPropertyChanged(propertyName);
        return true;
    }

    protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        var eventHandler = this.PropertyChanged;
        if (eventHandler != null)
        {
            eventHandler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

Это нормально.

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

private  int _timeEstimate;
        public int TimeEstimate
        {
            get { return this._timeEstimate; }
            set { this.SetProperty(ref this._timeEstimate, value); }
        }

_timeEstimate не инициализирован, как его можно передать с помощью ref?! есть что-то, что мне не хватает? это действительно расстраивает меня, чего мне не хватает, я даже нахожу то же самое в книгах по подготовке к экзамену Microsoft's Exam-Ref!


person AymenDaoudi    schedule 17.02.2014    source источник


Ответы (1)


_timeEstimate — это поле. Поля явно инициализируются своими нулевыми значениями во время построения class (до запуска конструктора). Для struct они должны быть явно инициализированы в конструкторе или обнулены, если тип инициализирован конструктором по умолчанию (примечание: технически struct не имеет конструкторов по умолчанию, но C# и IL не согласны с этим, поэтому мы просто вызову new SomeStruct() конструктор для удобства ;p)

В основном: он инициализирован.

Это локальные переменные, которые не инициализированы.

person Marc Gravell    schedule 17.02.2014