Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 08.10.2017
Сообщений: 23

Нет доступа к глобальной структуре

07.11.2023, 02:32. Показов 587. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток!

Не могу получить доступ к глобальной структуре subscription.
C#
1
2
3
4
Workout.subscription.Id = 1;
// или
Subscription subscription2 = Workout.subscription;
subscription2.Id = 1;
Доступ к переменной Num в том же классе есть без проблем.
Ну могу понять почему так, прошу помочь разобраться с причиной.

C#
1
2
3
4
5
6
7
8
9
10
11
    public class Workout
    {
        public static int Num;
        public Subscription subscription;
    }
 
    public class Subscription
    {
        public int Id { get; set; } = 0;
        public string Name { get; set; } = string.Empty;
    }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.11.2023, 02:32
Ответы с готовыми решениями:

Нет доступа к глобальной переменной в прерывании таймера
Доброго времени суток. Никак не могу понять, толи лыжи не едут, толи я чего-то не понимаю и мне пора спать. В общем и целом, объявил я...

Нет доступа к структуре. Исправить код
Привет, вот решил применить изученое :). Сделал программу. Код ниже. #include <iostream> using namespace std; void pig() { ...

Windows XP нет доступа к сети, нет доступа к Norton антивирус, сетевых служб нет
Отключился Инет, попробовал загрузить сетевые подключения - нет ни одной иконки. Загрузился с Ubuntu проверил clamav (базы обновлены)...

7
fly
 Аватар для I can
4943 / 4625 / 843
Регистрация: 13.04.2015
Сообщений: 9,804
07.11.2023, 06:19
Цитата Сообщение от armtechnics Посмотреть сообщение
разобраться с причиной.
Классы не статические, нужно создавать экземпляры классов.

Добавлено через 1 минуту
C#
1
2
3
4
5
6
          //  Workout.subscription.Id = 1;
            Workout workout = new Workout();
            workout.subscription.Id = 1;
             //
            Subscription subscription2 = workout.subscription;
            subscription2.Id = 1;

C#
1
2
3
4
5
6
7
8
9
10
11
    public class Workout
    {
        public static int Num;
        public Subscription   subscription = new Subscription();
    }
 
    public class Subscription
    {
        public int Id { get; set; } = 0;
        public string Name { get; set; } = string.Empty;
    }
0
0 / 0 / 0
Регистрация: 08.10.2017
Сообщений: 23
07.11.2023, 18:14  [ТС]
I can я понимаю как создавать новые экземпляры классов, мне не ясно как создать глобальный экземпляр класса к которому можно обращаться из любой части кода программы.
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
07.11.2023, 18:25
Цитата Сообщение от armtechnics Посмотреть сообщение
глобальный экземпляр класса к которому можно обращаться из любой части кода программы.
Можно сделать класс статическим - чтобы все его члены были статическими.
C#
1
2
3
4
5
public static class Workout
    {
        public static int Num;
        public static Subscription subscription;
    }
Но правильно делать - через Singleton паттерн.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
07.11.2023, 20:14
armtechnics, в C# нет как такового понятия "глобальный". Есть уровни доступа, включая public, и есть static, который позволяет обращаться к элементам класса, не создавая сам объект класса.

Как выше отметили, есть патерн Singleton, который можно реализовать через тот же public + static. Найболее правильный подход будет выглядеть как-то так:
C#
1
2
3
4
5
6
7
8
public class Nya
{
    private static readonly Lazy<Nya> _lazy =
        new (() => new Nya());
 
    public static Nya Shared
        => _lazy.Value;
}
Почему "так":
- Lazy<T> гарантирует что мы иницилизируем объект только по необходимости и обеспечит защиту в много поточном коде
- private readonly гарантирует что никто не поменяет внутренний объект
- дополнительная инфа https://metanit.com/sharp/patterns/2.3.php

если нужно просто указать пол-дюжины значений для доступа из любой точки (очень часто используется для настроек), можно упростить до такого вида:
C#
1
2
3
4
5
6
7
8
public class Settings
{
    private static readonly TimeSpan _timeout = TimeSpan.FromSeconds(10);
 
    public static string Url => "http://nya.sh";
    public static int RepeatCount => 5;
    public static TimeSpan Timeout => _timeout;
}
Отмечу что не константные значения, а всякие структоры и тем более классы стоит выносить в приватные поля, т.к. в противном случае они буду заново создаваться каждый раз при обращении к свойству (ну или забить на свойства, и юзать прям поля).


В более сложный проектах (например веб-серверах) как правило присутствует ioc-контейнер, через который Singelton и реализуется, так что по факту там оперируют тупо объектом класса.
0
07.11.2023, 20:53

Не по теме:

Цитата Сообщение от Wolfdp Посмотреть сообщение
public static string Url => "http://nya.sh";
давно умер(

0
0 / 0 / 0
Регистрация: 08.10.2017
Сообщений: 23
07.11.2023, 21:09  [ТС]
Всем спасибо!
Как применить Сиглетоны для работы с классом Workout не понял(
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
07.11.2023, 21:16
Цитата Сообщение от armtechnics Посмотреть сообщение
с классом Workout не понял
Из примера Wolfdp:
C#
1
2
var instance = Nya.Shared; //только назвать лучше Instance
                           // и добавить private конструктор (много неточностей, но в целом идея должна быть понятна)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.11.2023, 21:16
Помогаю со студенческими работами здесь

Скачал вредоносный .exe файл и теперь нет доступа к удалению его из системы, нет доступа к восстановлению
Добрый день! Вляпался в следующее: скачал файл-установщик, произвелась установка как оказалось совершенно не того, попытка удалить из...

Нет доступа к ПК и с него тоже нет доступа к другим ПК в сети
Суть проблемы следующая, есть ноут Win7 Starter Edition. Этот ноут стоит в бухгалтерии и там разные буховские проги. Он видится в локальной...

Отключение доступа к сайту из глобальной сети. Windows server 2008
Здравствуйте. Нужен был ресурс для локальной сети и был поднят веб-сервер. Однако, к этому ресурсу можно подключиться с помощью ip адреса...

Нет интернета. Мини-порт глобальной сети
В общем столкнулся с такой проблемой. При подключении к сети через провод у меня нет интернета (раньше был) а через wi-fi все нормально. В...

Нет доступа в интернет через мобильную точку доступа
Всегда раздавал интернет с телефона на ноутбук, буквально пару дней назад случилась такая ситуация : при подключении с ноутбука к мобильной...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru