Когда следует использовать глобальные переменные?

Мне интересно, когда уместно использовать глобальные переменные. У меня есть пример следующим образом:

public partial class Form1 : Form
    {
        List<string> fileTypes = new List<string>();

        private void btnManualBackup_Click(object sender, EventArgs e)
        {
            fileTypes.add("add stuff");
            
        }
    }

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

В C# нет настоящих глобальных переменных. Вместо этого класс может иметь public static переменные. Использовать ли переменную экземпляра или статическую переменную, зависит от вас. Мы не высказываем здесь мнения, поэтому вряд ли вы получите слишком много советов по этому поводу, но вам нужно изучить static и его значение.

Flydog57 20.04.2023 17:22

Может быть интересно следующее: Переменные.

Tu deschizi eu inchid 20.04.2023 17:26
fileTypes — это поле, а не «глобальное» — согласно этим документам «Поля являются членами своего содержащего типа». Это идеальный способ хранения значений, которые существуют на протяжении всего времени существования формы. Где вы его поместите, зависит от личных предпочтений.
stuartd 20.04.2023 17:31
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В вашем примере тип файла не является глобальным. Это личное. Если перед decleration нет ключевого слова, оно обычно является частным. Использование, как показано в вашем коде, в порядке. Если вы хотите создать список с первого щелчка, вы можете изменить код следующим образом:

Глобальные переменные не должны использоваться, если это возможно.

public partial class Form1 : Form
{
    private List<string> fileTypes; // private for clarification 

    private void btnManualBackup_Click(object sender, EventArgs e)
    {
        if (fileTypes == null) // If fileType is not created do it
            fileTypes = new new List<string>();
        fileTypes.add("add stuff");
        
    }
}

Существуют и другие решения в зависимости от вашей версии С# с оператором ? https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-coalescing-operator

Что касается глобальной переменной, в С# они обычно статичны и находятся вне класса. https://www.arclab.com/en/kb/csharp/global-variables-fields-functions-static-class.html

Другие вопросы по теме