Глобальная переменная в статическом методе

Это кажется основным, но я нахожу это довольно тривиальным. Просто, как Вы рекомендовали бы установить глобальную переменную со статическим классом (т.е. консольное приложение)?

Чтобы дать Вам немного больше фона, основной метод называет некоторый пользовательский eventhandlers, который я надеюсь получить / устанавливает переменные.

Ценятся любые идеи или предложения, которые Вы имеете.

7
задан Leroy Jenkins 17 February 2010 в 03:38
поделиться

3 ответа

Самый простой способ - это

public static Object MyGlobalVariable;

, который создает общедоступное статическое поле. Немного лучше:

public static Object MyGlobalVariable { get; set; }

Создает общедоступное статическое свойство.

10
ответ дан 6 December 2019 в 07:06
поделиться

В C# нет глобальных переменных. Переменная всегда локально скопирована. Фундаментальной единицей кода является класс, а внутри класса есть поля, методы и свойства.

Вы можете имитировать "глобальную переменную", создав публичное статическое поле или свойство в каком-либо классе, но вы не должны. C# делает это сложным по очень веской причине; глобальные переменные - это чистое зло. Они нарушают несколько хороших принципов проектирования ОО - инкапсуляцию, свободную связь и высокую сплоченность, и это лишь некоторые из них.

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

Если два разных класса зависят от одной и той же информации, то передайте информацию от источника к месту назначения. Обычно это делается либо через конструктор, либо в качестве аргумента вызываемого метода. У вас всегда должен быть один и только один экземпляр, который действительно "владеет" этой информацией; сделать информацию "глобальной" означает, что вы не можете рассуждать о том, кто или что может зависеть от нее в любой момент времени.

Пожалуйста, подумайте об этом и попробуйте подумать о других способах передачи информации, которую вы хотите хранить в глобальной переменной (например, предоставляя ее в качестве аргумента конструктору или методу). Если вы не уверены, опубликуйте пример того, что вы пытаетесь сделать, и мы вам поможем.

14
ответ дан 6 December 2019 в 07:06
поделиться

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

http://www.yoda.arachsys.com/csharp/singleton.html

1
ответ дан 6 December 2019 в 07:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: