Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Read only свойство


Автор: Vit 23.4.2007, 16:15
У меня есть такой простейший код:

Код
class MyClass
{
  public string MyProperty;
}


Я могу объявить что MyProperty "из вне" класса было бы только read-only, а менять его можно только внутри класса? Существует ли специальная директива, или надо реализовывать через get/set и третью переменную? 

Автор: HalkaR 23.4.2007, 16:21
Зачем третья переменная?
Код

publiс string MyPublicProperty
{
get{return MyProperty;}
}

Может есть другие способы?

Добавлено @ 16:21
Но я их не знаю  smile 

Автор: Wanderer2019 23.4.2007, 16:24
Цитата(Vit @  23.4.2007,  16:15 Найти цитируемый пост)
Я могу объявить что MyProperty "из вне" класса было бы только read-only, а менять его можно только внутри класса? Существует ли специальная директива, или надо реализовывать через get/set и третью переменную?  


ну, насколько я понимаю это и есть одна из целей приследуемых get/set. 
Модификаторов доступа средствами которых можно было бы добиться такого результата вроде бы нет.

Можно конечно просто написать public get метод =).

Автор: Дрон 23.4.2007, 16:25
Любопытно. Но нет, так нельзя.

Или как HalkaR сказал, или вот так, для единообразия:
Код

    class MyClass
    {
        private string myProperty;

        public string MyProperty
        {
            get // доступно извне
            {
                return myProperty;
            }
            private set // доступно только внутри класса
            {
                myProperty = value;
            }
        }
    }



Автор: Vit 23.4.2007, 18:49
Цитата(Дрон @  23.4.2007,  07:25 Найти цитируемый пост)
Или как HalkaR сказал, или вот так, для единообразия:


Ух-ты, какой код! Мне понравилось, спасибо!


Цитата(HalkaR @  23.4.2007,  07:21 Найти цитируемый пост)
Зачем третья переменная?


В твоём примере MyProperty и есть дополнительная переменная, только я ошибся, не третья, а вторая  smile 

Автор: Любитель 23.4.2007, 22:46
Vit, свойства и поля - это строго говоря разные вещи. Переменная -  это поле, а свойство - аксессор к полю (впрочем, не обязательн ок полю).

Зы Хотя, конечно, мелочь. smile

Автор: mr.DUDA 24.4.2007, 11:29
Цитата(Любитель @  23.4.2007,  22:46 Найти цитируемый пост)
Зы Хотя, конечно, мелочь.

Да не мелочь, всё правильно.  smile 

Свойство - это не данные, а код. После компиляции MyProperty превратится в парочку методов с именами get_MyProperty и set_MyProperty.

Автор: Vit 24.4.2007, 16:01
Цитата(Любитель @  23.4.2007,  13:46 Найти цитируемый пост)
Vit, свойства и поля - это строго говоря разные вещи. Переменная -  это поле, а свойство - аксессор к полю (впрочем, не обязательн ок полю).



Строго говоря - да, но строго получилось бы если бы язык требовал доступ к любой переменной класса из-вне через поле с определёнными get/set, а так как можно просто объявить переременную с public доступом, то различия слегка стираются... Впрочем я понимаю отличия, просто не всегда могу пользоваться терминами C# - они немного другие, чем те к которым я привык... 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)