Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Общие вопросы по .NET и C# > Вопрос по классам в C# |
Автор: boxpvm 14.11.2011, 10:43 |
Условия задачи: // Я создал класс 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? |
Автор: VladDnepr 14.11.2011, 11:17 |
У тебя Igrok Igrok1; является локальной переменной метода button1_Click. Она доступна только в этом методе. Вынеси ее куда-то повыше. |
Автор: boxpvm 14.11.2011, 14:32 |
А как же я вынесу повыше, если экземпяр класса Igrok - Igrok1 должен создаваться при нажатии на кнопку. |
Автор: Экскалупатор 14.11.2011, 16:56 | ||
надо наверное учебник почитать, первую главу про видимость переменных. тогда и вопросов таких не будет...
|
Автор: Brilona 14.11.2011, 17:02 | ||
Экземпляр класса создаётся этой строкой:
Переменная для него может быть объявлена и выше. |
Автор: boxpvm 14.11.2011, 18:26 |
Дело в том что я не знаю заранее сколько будет экземпляров класса Igrok. Напимер в онлайн-игре игроки у меня должны появляться при нажатии кнопки входа в игру. Заранее я не могу объявлять: Igrok Igrok1;//объявлено на уровне класса, будет видна и доступна во всех методах этого класса Если объявить заранее, то ошибки нет, но то, что я присваиваю поле в void button1_Click Igrok1.Name = textBox1.Text; и пытаюсь его использовать в void Each_Tick TextBlockTimer.Text = Igrok1.Name; возникает ошибка "В экземпляре объекта не задана ссылка на объект." Как же в этом C# использовать в одном методе то, что делаешь в другом методе? (вы извините за глупый вопрос, просто читать кучу учебников нет времени, разбираюсь по ходу). |
Автор: Экскалупатор 14.11.2011, 18:58 |
боюсь что помучавшись пару недель все равно придется обратиться к учебникам. дело не в шарпе, дело в понимании архитектуры. и без знания минимальных основ, мне кажется, дальше разбираться просто не имеет смысла, потому что будет становится только сложнее... про твою проблему, очевидно что если игроков будет много(кстати интересно как их будет много через одну кнопку? или это веб?), то нужно сделать массив игроков(в данном случае лучше List<T>) и использовать его для хранения всех пользователей. объявить его на общем уровне, а в методах, где нужно, добвлять/удалять/изменять его элементы. но опять же без основ это все темный лес и тут быстрее шею себе свернешь чем разберешься... |
Автор: boxpvm 15.11.2011, 05:23 |
Спасибо за ответы! Теперь буду читать учебники! |