Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 27.05.2016
Сообщений: 49

Общие переменные / объекты для всех форм

27.10.2018, 11:00. Показов 3423. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите каким образом можно хранить несколько переменных, либо объектов так, что бы к ним был доступ из всех форм приложения.
Например:
Есть главная форма, перед инициализацией она вызывает форму авторизации, которая получает с сервера объект, который содержит все данные о пользователе (логин, роль, токен и тд.). В дальнейшем эти данные будут использоваться почти во всех формах. Хотелось бы обойтись без передачи из формы в форму этих данных.
Или например в этой же программе есть класс, в котором содержаться методы для работы с сервером. Для работы с ним нужно в каждой форме создавать экземпляр этого класса. Можно ли его один раз создать и так же использовать из разных форм?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.10.2018, 11:00
Ответы с готовыми решениями:

Общие метоты и переменные для класса
Добрый день, как объявить переменную (int, string, int) и методы в классе, так чтобы они были общие для всех экземпляров класса,...

Как объявить структуру и её экземпляры общие для нескольких форм?
Всем здравствуйте. В проект включён файл PublicDecl.cpp в нём описана общая для нескольких форм переменная: #include...

Функция, в функции main() или общие переменные для нескольких функций
Делаю мелкую игрушку, в консоли, ради забавы и столкнулся с 1 проблемой: Невозможно, создавать функцию в функции, вынеся эту функцию за...

5
 Аватар для PoPsa85
814 / 561 / 240
Регистрация: 01.07.2018
Сообщений: 1,818
27.10.2018, 11:06
Лучший ответ Сообщение было отмечено traceonelast как решение

Решение

traceonelast, Это называется static class
1
0 / 0 / 0
Регистрация: 27.05.2016
Сообщений: 49
27.10.2018, 12:50  [ТС]
Цитата Сообщение от PoPsa85 Посмотреть сообщение
traceonelast, Это называется static class
Я так понял, что больше подходит для класса, в котором нету полей, которые могут изменятся.
А у меня в конструктор класса при создании передается адрес и порт сервера, который читается из .ini файла перед запуском. А с классом, который содержит данные пользователя так же, данные в него заносятся после авторизации.
С хабра я прочитал, что если класс статический, то нельзя использовать его не статические члены.
Или я всё напутал?

Добавлено через 1 час 4 минуты
Цитата Сообщение от PoPsa85 Посмотреть сообщение
traceonelast, Это называется static class
Все, разобрался. Извиняюсь, за свою глупость. Почему-то думал, что статик члены обязательно должны быть заданы изначально как константы.
0
 Аватар для PoPsa85
814 / 561 / 240
Регистрация: 01.07.2018
Сообщений: 1,818
27.10.2018, 12:51
traceonelast,
Цитата Сообщение от traceonelast Посмотреть сообщение
Я так понял, что больше подходит для класса, в котором нету полей, которые могут изменятся.
Не совсем так, у статического классам могут быть поля, методы. свойства, но все они должны иметь модификатор static. Конструктор, так же должен быть статичным.
Цитата Сообщение от traceonelast Посмотреть сообщение
С хабра я прочитал, что если класс статический, то нельзя использовать его не статические члены.
Все верно. студия вам просто не даст собрать приложение если у статического класса есть член без модификатора static.
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
27.10.2018, 12:56
Лучший ответ Сообщение было отмечено traceonelast как решение

Решение

Цитата Сообщение от traceonelast Посмотреть сообщение
Я так понял, что больше подходит для класса, в котором нету полей, которые могут изменятся. С хабра я прочитал, что если класс статический, то нельзя использовать его не статические члены.
Или я всё напутал?
А вы не хабр читайте а документацию и учебник по C#.

Цитата Сообщение от traceonelast Посмотреть сообщение
А у меня в конструктор класса при создании передается адрес и порт сервера, который читается из .ini файла перед запуском. А с классом, который содержит данные пользователя так же, данные в него заносятся после авторизации.
Во-первых, есть более общее понятие - синглтон. Он в общем случае не является статическим классом, и у него можно вызвать конструктор:

C#
1
2
3
4
5
6
7
8
9
10
class Singleton
{
    public static Singleton Instance{ get; private set;}
 
    public Singleton(...params...)
    {
         //...
         Instance = this;
    }
}
Во-вторых, передавать параметры в конструктор - не очень хорошая идея. Потому что если у вас изменится "адрес и порт сервера" то как вы передадите их в синглтон? Ведь конструктор второй раз не вызовешь. А значит придется создавать новый объект. А это уже не синглтон.
Лучше сделать метод void Init(...) куда передавать параметры, и который будет инициализировать поля класса.

Ну и в-третьих, так, на будущее - делать статические классы или синглтоны - в общем случае плохая практика. Представьте себе, что завтра пользователей станет несколько, или же вам придется делать тестирование с фейковым пользователем, или для некоторых форм нужно будет использовать данные из другого аккаунта и т.д. Во всех этих случаях глобальные данные - зло.
1
0 / 0 / 0
Регистрация: 27.05.2016
Сообщений: 49
28.10.2018, 15:18  [ТС]
Спасибо за расширенный ответ. С документацией плохо дружу, просто не хватает каких-то базовых знаний, что бы нормально понимать её, а до учебника всё руки не доходят.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.10.2018, 15:18
Помогаю со студенческими работами здесь

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

Рассчитать общие, предельные, средние постоянные, средние переменные и средние общие затраты предприятия
Задание 6. Рассчитать общие, предельные, средние постоянные, средние переменные и средние общие затраты предприятия, если известно, что...

Регистры общие для всех программ?
Я, конечно, обычно всё понимаю, но сейчас я ничего не понимаю... То есть, работает себе такая программа с регистром EAX, выполняет...

Найти элементы, общие для всех множеств
Дано n множеств, набор элементов с которых можно создать множества записаные в масиве С. Найти элементы общие для всех множеств. Ребят...

найти общие делители для всех элементов
Здравствуйте. Я программу написал для нахождения делителя в двух целых чисел, а мне препод говорит, теперь такая задача, дан целочисленный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru