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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по классам в C# 
:(
    Опции темы
boxpvm
Дата 14.11.2011, 10:43 (ссылка)   | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Условия задачи:

// Я создал класс Igrok с полем Name

        public class Igrok
        {
            public string Name;
        }

// При нажатии на кнопку должен создаваться экземпляр игрока и из формы присваиваться имя игрока в поле Name

        public void button1_Click (object sender, RoutedEventArgs e)
        {
            Igrok Igrok1;
            Igrok1 = new Igrok();
            Igrok1.Name = textBox1.Text;
        }

// Метод работает каждые 100мс и должен в форму выводить имя игрока Igrok1.Name (имя игрока должно выводиться именно здесь, так как оно выводится вместе с расчитанным временем в игре).
        public void Each_Tick (object o, EventArgs sender)
        {
            TextBlockTimer.Text = Igrok1.Name;
        }

Вопрос:

Почему в методе Each_Tick ошибка "Igrok1.Name не существует в текущем контексте"?
В методе button1_Click             Igrok1 = new Igrok() создается как локальная переменная.

Как сделать чтобы Igrok1.Name был виден в Each_Tick?
PM MAIL   Вверх
VladDnepr
Дата 14.11.2011, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



 У тебя Igrok Igrok1; является локальной переменной метода  button1_Click. Она доступна только в этом методе.
Вынеси ее куда-то повыше.

PM MAIL   Вверх
boxpvm
Дата 14.11.2011, 14:32 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А как же я вынесу повыше, если экземпяр класса Igrok - Igrok1 должен создаваться при нажатии на кнопку.
PM MAIL   Вверх
Экскалупатор
Дата 14.11.2011, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



надо наверное учебник почитать, первую главу про видимость переменных. тогда и вопросов таких не будет...
Код

 Igrok Igrok1;//объявлено на уровне класса, будет видна и доступна во всех методах этого класса
        public void button1_Click (object sender, RoutedEventArgs e)
        {
            Igrok1 = new Igrok();
            Igrok1.Name = textBox1.Text;
        }

PM MAIL ICQ   Вверх
Brilona
Дата 14.11.2011, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Экземпляр класса создаётся этой строкой:
Код

Igrok1 = new Igrok();


Переменная для него может быть объявлена и выше.
PM MAIL ICQ   Вверх
boxpvm
Дата 14.11.2011, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Дело в том что я не знаю заранее сколько будет экземпляров класса Igrok.
Напимер в онлайн-игре игроки у меня должны появляться при нажатии кнопки входа в игру.
Заранее я не могу объявлять:
 
Igrok Igrok1;//объявлено на уровне класса, будет видна и доступна во всех методах этого класса

Если объявить заранее, то ошибки нет, но то, что я присваиваю поле в void button1_Click 
            Igrok1.Name = textBox1.Text;

и пытаюсь его использовать в void Each_Tick
            TextBlockTimer.Text = Igrok1.Name;
возникает ошибка "В экземпляре объекта не задана ссылка на объект."

Как же в этом C# использовать в одном методе то, что делаешь в другом методе? (вы извините за глупый вопрос, просто читать кучу учебников нет времени, разбираюсь по ходу).

PM MAIL   Вверх
Экскалупатор
Дата 14.11.2011, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



Цитата(boxpvm @  14.11.2011,  17:26 Найти цитируемый пост)
просто читать кучу учебников нет времени, разбираюсь по ходу

боюсь что помучавшись пару недель все равно придется обратиться к учебникам.

дело не в шарпе, дело в понимании архитектуры. и без знания минимальных основ, мне кажется, дальше разбираться просто не имеет смысла, потому что будет становится только сложнее...

про твою проблему, очевидно что если игроков будет много(кстати интересно как их будет много через одну кнопку? или это веб?), то нужно сделать массив игроков(в данном случае лучше List<T>) и использовать его для хранения всех пользователей. объявить его на общем уровне, а в методах, где нужно, добвлять/удалять/изменять его элементы.

но опять же без основ это все темный лес и тут быстрее шею себе свернешь чем разберешься...
PM MAIL ICQ   Вверх
boxpvm
Дата 15.11.2011, 05:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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


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

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


 




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


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

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