Область переменных Winform - PullRequest
       9

Область переменных Winform

4 голосов
/ 18 октября 2011

Это плохая практика, чтобы поместить большинство переменных на уровне класса в форме? Будут ли они считаться глобальными переменными?

public partial class Form1 : Form
{
    private string mode;
    private int x, y;

    public Form1()
    {
        InitializeComponent();
    }
}

Я использую переменные в нескольких элементах управления, когда объявляю их на уровне класса.

Ответы [ 6 ]

4 голосов
/ 18 октября 2011

Что я понял из вопроса, так это то, что если вы используете как Индивидуальную форму, которая не зависит от какой-либо формы, то все эти переменные будут частными переменными для класса. И если форма вызывается откуда-то еще. Тогда и это будут приватные переменные. Если вы действительно хотите создать четкий дизайн, вы можете создать открытые свойства поверх частных переменных, которые вы хотите предоставить другому классу.

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

2 голосов
/ 21 октября 2011

Они не считаются глобальными переменными.Они глобальны только в классе Form1, а не во всей программе.

2 голосов
/ 18 октября 2011

Они будут считаться глобальными переменными уровня класса (чтобы отличить их от глобальных приложений). Более важным различием в этом случае является то, что они относятся к классу private.Поэтому я бы не назвал это плохой практикой.Очень полезно использовать глобальные переменные частного класса, когда вы планируете предоставлять их через средства доступа к свойствам .Например:

  • public readonly свойства, значения которых контролируются внутренней логикой вашего класса.

  • public свойства с обоими set и get средства доступа (включающие пользовательскую логику проверки в установщике).

Однако я бы сказал, что это хорошая практика - делать вещи локальными, если в этом нет необходимости.Причина в том, что у вас менее изменчивое состояние, принадлежащее экземпляру класса, поэтому у таких ошибок меньше возможностей:

private int EvilMethod1() {  
    x = (int) Math.Pow((double) y, 2);
    return x;
} 

private int EvilMethod2() {  
    y = (x + y) * 2;                    
    return y;
}

// Assignments depend on the current values of x and y, 
// as well as yielding unexpected side effects.
private void PureEvil()
{
    // Return value depends on current y; has side effect on x while assigning y.
    y = EvilMethod1();  

    // Return value depends on current x and y; has side effect on y while assigning x.
    x = EvilMethod2(); 
}
1 голос
/ 18 октября 2011

Зависит от того, для чего используются переменные.

Если они используются только в одном методе, они должны быть локальными для этого метода.

Если они описывают состояние класса и используются в нескольких местах, их следует объявить членами класса.

0 голосов
/ 18 октября 2011

Не зная, какова цель вашей формы, трудно сказать, хорошо или плохо то, что вы делаете. Переменные, показанные здесь, имеют область видимости класса, и поскольку они являются частными, они не доступны за пределами Form1 и не считаются «глобальными».

Если вы действительно хотите глобальные переменные, создайте статический класс с закрытыми статическими переменными и общедоступными статическими аксессорами / мутаторами (свойство в C #) и получите доступ к переменной через открытое свойство. См. этот ответ для примера.

0 голосов
/ 18 октября 2011

Они являются частными для класса Form1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...