Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Read only свойство 
:(
    Опции темы
Vit
Дата 23.4.2007, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 1
Всего: 207



У меня есть такой простейший код:

Код
class MyClass
{
  public string MyProperty;
}


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


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
HalkaR
Дата 23.4.2007, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: 14
Всего: 42



Зачем третья переменная?
Код

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

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

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

Это сообщение отредактировал(а) HalkaR - 23.4.2007, 16:21
PM MAIL   Вверх
Wanderer2019
Дата 23.4.2007, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

Репутация: 7
Всего: 17



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


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

Можно конечно просто написать public get метод =).
PM ICQ MSN   Вверх
Дрон
Дата 23.4.2007, 16:25 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 92



Любопытно. Но нет, так нельзя.

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

    class MyClass
    {
        private string myProperty;

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




Это сообщение отредактировал(а) Дрон - 23.4.2007, 16:26


--------------------
Да. Именно так.
PM   Вверх
Vit
Дата 23.4.2007, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 1
Всего: 207



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


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


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


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


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Любитель
Дата 23.4.2007, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 11
Всего: 92



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

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


--------------------
PM MAIL ICQ Skype   Вверх
mr.DUDA
Дата 24.4.2007, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



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

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

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


--------------------
user posted image
PM MAIL WWW   Вверх
Vit
Дата 24.4.2007, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 1
Всего: 207



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



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


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0833 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.