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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос о свойствах 
V
    Опции темы
Nuzur
Дата 5.6.2007, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: нет
Всего: 5



Здравствуйте. Я программист на С++, вот изучаю C#.

Немогу понять в чем ошибка кода:

Код

    class Example
    {
        public string Str
        {
            get
            {
                return Str;
            }
            set
            {
                Str = value;
            }
        }
        public void Change( out int i )
        {
            i = 1;
            return;
        }
    }

    class Root
    {
        public static void Main(string[] arg)
        {
            Example Examp = new Example();
            
            Examp.Str = "New Value!";
            Console.WriteLine(Examp.Str);
            return;

        }
    }


При выполнении получаю стековерфлов, подскажите пожалуйста почему так? И что я делаю не верно. Заранее спасибо.


--------------------
Never again...
PM MAIL   Вверх
tol05
Дата 5.6.2007, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 63
Всего: 170



а где собственно поле? Str - свойство, поле или свойство-поле?  smile 
Код


string _Str;

public string Str
        {
            get
            {
                return _Str;
            }
            set
            {
                _Str = value;
            }
        }

так помогло? smile

Это сообщение отредактировал(а) tol05 - 5.6.2007, 12:12


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Nuzur
Дата 5.6.2007, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: нет
Всего: 5



tol05, помогло то помогло я тоже так делал. Просто я не понимаю логики разработчиков!
Тоесть я должен объявить приватным _Str и публичный "какбыметод" который делает доступ до приватного _Str.
Мне кажется это не логичным.


--------------------
Never again...
PM MAIL   Вверх
tol05
Дата 5.6.2007, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 63
Всего: 170



Цитата(Nuzur @  5.6.2007,  12:18 Найти цитируемый пост)
Тоесть я должен объявить приватным _Str и публичный "какбыметод" который делает доступ до приватного _Str.
Мне кажется это не логичным.
странная мысль...

Вот ты присвоил
Код

Examp.Str = "New Value!";

а где ты собираешься хранить эту строку в классе? Свойство - это синтаксическая конфета, превращающаяся при компиляции в пару методов get_XXXX и set_XXXX (кстати, поэтому если у тебя есть свойство с именем Str, то не вздумай объявлять в классе метод get_Str  smile )

Так вот, ты в экземпляр класса данные через свойство загнал. Хранить их в чем?!

p.s. а логика проста - ты скрываешь поле от посторонних и делаешь с ним в классе что хочешь. а посторонние могут только через свойство с полем работать. Вот в свойстве и вводят проверки корректности изменения, или доступ постороннему коду ограничивают, или под конкретные условия вызова данные поля подстраивают...

Это сообщение отредактировал(а) tol05 - 5.6.2007, 12:31


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Pankon
Дата 5.6.2007, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 739
Регистрация: 2.6.2005

Репутация: 3
Всего: 5



Цитата(Nuzur @  5.6.2007,  12:18 Найти цитируемый пост)
Тоесть я должен объявить приватным _Str и публичный "какбыметод" который делает доступ до приватного _Str.
 если не подходят свойства, можно использовать public  поля
Код

public string Str;


Где и как (зачем) использовать Свойства tol05 обьяснил...
PM MAIL   Вверх
Nuzur
Дата 5.6.2007, 12:52 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: нет
Всего: 5



tol05, Согласен, просто я немного по другому представлял себе эту модель. На си оно так и есть get_member, set_member. Просто думал что можно метод объявить "в рамках переменной", тоесть в духе я объявляю переменную и сразу же могу объявить методы для нее с тем же именем. Вроде складно получалось ан нет.

Я сразу по аналогии с си сделал так как вы писали в вашем 1м посте, у меня вышло, но мне показалось что я чего-то недопонял, решил спросить.

Спасибо за разъяснения.

ЗЫ а все-таки было б здорово переменная и сразу методы к ней... "Но человек может мечтать" (С) Профессор Фарнсворт(Футурама)


--------------------
Never again...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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