Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/50: Рейтинг темы: голосов - 50, средняя оценка - 4.68
 Аватар для Max_92
28 / 10 / 1
Регистрация: 26.04.2010
Сообщений: 457

Создание "глобальных" массивов, доступных из любого класса

09.04.2012, 18:53. Показов 9434. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Насколько я знаю, глобальных объектов в C# нет. Но можно, используя статические свойства класса, сделать так, чтобы они были доступны из любого класса и их значения не удалялись из памяти до конца выполнения программы:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public sealed class GlobalVariables
{
private static int _m;
 
public static int m
{
get { return _m; }
set { _m = value; }
}
 
}
 
//где-то в программе
GlobalVariables.m = 423;
 
Но как в таком случае быть с массивами??
Пытался объявлять разными способами, постоянно выдаёт кучу ошибок в процессе, последний вариант вот:
 
public sealed class GlobalVariables
{
private static double[] Mas;
 
public static class ClassMas
{
    public static double[] Mas = new double[17]
}
}
       GlobalVariables.ClassMas.Mas[1] = 5; // не получается обратиться к элементу массива
Так как же правильно всё-таки объявить "глобальный" массив?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.04.2012, 18:53
Ответы с готовыми решениями:

Создание класса конструктора для создание объектов в Higchart на основе массивов данных
Привет всем! Нужна ваша помощь в создании управляемой диаграммы. С помощью библиотеки Higchart, я создала круговую диаграмму. В этой...

Ключи глобальных массивов в кавычках или без?
Доброго времени суток! Как правильно записывать ключи (правильно ли их называть ключами?) в глобальных массивах - в кавычках или без? ...

Использование переменных класса вместо глобальных констант
Добрый вечер. Подскажите плиз. Нормально будет использовать переменные класса, вместо глобальных констант? Чтобы в случае если, я захочу...

10
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
09.04.2012, 19:02
Цитата Сообщение от Max_92 Посмотреть сообщение
не получается обратиться к элементу массива
Чего пишет-то?
0
 Аватар для Max_92
28 / 10 / 1
Регистрация: 26.04.2010
Сообщений: 457
09.04.2012, 19:11  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
Чего пишет-то?
Пространство имен не может непосредственно содержать такие члены, как поля или методы - подчёркнуто "GlobalVariables";
Требуется идентификатор - подчёркнуто "[1]".
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
09.04.2012, 19:12
Вы с фигурными скобками чего-то напутали, у вас массив объявляется вне тела класса.
Проверьте.
0
 Аватар для Max_92
28 / 10 / 1
Регистрация: 26.04.2010
Сообщений: 457
09.04.2012, 19:20  [ТС]
до этого я в такой же последовательности объявлял обычную переменную, ошибок не было. проблема в чём-то другом. у вас какие предложения на этот счёт?

Добавлено через 1 минуту
Ещё выдаёт: Не удалось найти имя типа или пространства имен "?Attribute" (пропущена директива using или ссылка на сборку?)
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
09.04.2012, 19:21
Не хотите ли вы сказать, что это компилятор ошибается?
Выкладывайте код, желательно весь файл, - глянем что там как.
Вы там явно с синтаксисом намутили.
0
 Аватар для Max_92
28 / 10 / 1
Регистрация: 26.04.2010
Сообщений: 457
09.04.2012, 19:34  [ТС]
Вложение
Вложения
Тип файла: rar WindowsFormsApplication2.rar (28.7 Кб, 19 просмотров)
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
09.04.2012, 19:39
Отформатированный вариант:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    }
 
   public sealed class GV
   {
        private static int _m;
        public static int m
        {
            get { return _m; }
            set { _m = value; }
        }
 
 
        private static double[] PrX;
        public static class ClassPrX
        {
            public static double[] PrX = new double[17];
        }
 
    }
    GV.ClassPrX.PrX[1] = 5;  //не работает
    GV.m = 10;  // работает
}
У вас обращение к GV идет вне тела метода.
И не работают обе строчки, а не одна.
0
 Аватар для Max_92
28 / 10 / 1
Регистрация: 26.04.2010
Сообщений: 457
09.04.2012, 19:57  [ТС]
да, ошибся, первоначально у меня обе они были внутри public partial class Form1 : Form {} после public Form1().
я просто, кусок из оригинальной программы скопировал, много лишнего там. допустим, что те две строчки внутри того места, где я сказал, от этого суть не меняется: GV.ClassPrX.PrX[1] = 5 нигде не работает.
как всё-таки правильно массив задать и обратиться к нему? может быть есть более простой и правильный вариант?
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
09.04.2012, 22:09
Ну как пример сойдёт думаю:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    public class SomeData
    {
        private string _programName;
 
        public SomeData(string programName)
        {
            _programName = programName;
        }
 
        public string ProgramName
        {
            get { return _programName; }
        }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    public static class Global
    {
        private static int _someField;
        private static double[] _prX;
        private static SomeData _data;
 
        static Global()
        {
            _data = new SomeData("Моя программа");
            _prX = new double[100];
        }
 
        public static int SomeProperty
        {
            get { return _someField; }
            set { _someField = value; }
        }
 
        public static double[] PrX 
        { 
            get { return _prX; }
            set { _prX = value; }
        }
 
        public static SomeData Data { get { return _data; } }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            Global.SomeProperty = 999;
            Text = Global.Data.ProgramName;
            Global.PrX[0] = 5;
        }
    }
1
 Аватар для Max_92
28 / 10 / 1
Регистрация: 26.04.2010
Сообщений: 457
10.04.2012, 21:21  [ТС]
теперь другая проблема. во второй форме значение переменной (из класса GV, либо локальной) не хочет выводится в textBox: textBox1.Text = GV.Rx.ToString(); хотя в первой форме, где все эти переменные объявлены, переменная тем же способом выводится нормально. в чём может быть проблема? вот сам прожект (много лишних вещей там, не обращайте на них внимания):
Вложения
Тип файла: rar WindowsFormsApplication1.rar (67.0 Кб, 7 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.04.2012, 21:21
Помогаю со студенческими работами здесь

Разработайте класс, способный запоминать список объектов незаданного типа класса (для любого класса)
Разработайте класс, способный запоминать список объектов незаданного типа класса (для любого класса).

Создать программу – создание и просмотр двумерных массивов в стиле MDI. Использовать компонент класса TStringGrid
Создать программу – создание и просмотр двумерных массивов в силе MDI. Использовать компонент класса TStringGrid. очень нужна помощь!!!!

Создание глобальных переменных
тобы объявлёные переменные а=2,b=1 из одной функции (напрмер private static void Main()) были уэе объявлены в другой, и программа работала ...

создание глобальных переменных
В общем нужна глобальная пиеременная. ДЕлаю все как в инструкции: Создаю класс и описываю в нем глобальную переменную: class...

Создание глобальных хуков
Здравствуйте.Как создать глобальный хук?Если я правильно понял-это в dll файлах.Напишите пожалуйста пример


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
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-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru