воскресенье, 5 августа 2012 г.

.NET C# - Особенность модификатора readonly

Каждому известно, что инициализация readonly полей класса может осуществляться только при помощи инициализатора поля или же в конструкторе.
class Person
{
    private readonly int _age;

    public Person()
    {
        _age = 10;
    }
}
А что если нам надо провести инициализацию например в каком-нибудь методе класса и вызвать его из конструктора? Например так
class Person
{
    private readonly int _age;

    public Person()
    {
        Init();
    }

    private void Init()
    {
        _age = 10;
    }
}
Компилятор нам этого сделать не позволит. Выход из данной ситуации есть и состоит он в применении ref и out модификаторов.
class Person
{
    private readonly int _age;

    public Person()
    {
        Init(out _age);
    }

    // Применяем out но можно и ref
    private void Init(out int age)
    {
        age = 10;
    }

}
И это сработает! На этот раз компилятор ругаться не будет. Вот такой вот небольшой обходной путь при инициализации readonly полей из методов класса.

Комментариев нет:

Отправить комментарий