Winform变量范围

本文关键字:范围 变量 Winform | 更新日期: 2023-09-27 18:11:45

在表单中将大多数变量放在类级别是不好的做法吗?这些会被认为是全局变量吗?

public partial class Form1 : Form
{
    private string mode;
    private int x, y;
    public Form1()
    {
        InitializeComponent();
    }
}

当我在类级别声明变量时,我在多个控件中使用它们。

Winform变量范围

我从这个问题中得到的是,如果你使用的是不依赖于任何形式的个人形式,那么所有这些变量都将是类的私有变量。如果表单从其他地方被调用。那么它也是私有变量。如果你真的想做一个清晰的设计,那么你可以在你想要公开给其他类的私有变量上创建公共属性。

通过这种方式,您可以通过创建只读属性来限制对其他类的私有变量的访问,以便其他类不能修改但可以访问它。

这些将被视为类级全局变量(以区别于应用程序全局变量)。在这种情况下,更重要的区别是它们是类的private

类级别的全局变量有它们的用途,所以我绝对不会说它是一个坏的做法。私有类全局变量的一个很好的用途是当您计划通过属性访问器公开它们时。例如:

  • public readonly属性,其值由类内部逻辑控制。

  • public属性与setget访问器(在setter中启用自定义验证逻辑)

然而,我想说,除非有必要,否则将事情本地化是一个很好的做法。原因是属于类实例的可变状态较少,因此出现以下错误的可能性较小:

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(); 
}

这些不被视为全局变量。它们仅在Form1类中是全局的,而不是整个程序。

这取决于变量的用途。

如果它们只在一个方法中使用,那么它们应该是该方法的局部变量。

如果它们描述了类的状态,并且在多个地方使用,它们应该被声明为类成员。

它们对于Form1类是私有的

如果不知道表单的目的是什么,就很难说您所做的是好是坏。这里显示的变量具有类作用域,因为它们是私有的,所以不能在Form1之外访问它们,也不被认为是"全局的"。

如果你真的想要全局变量,创建一个包含私有静态变量和公共静态访问/mutators (c#中的一个属性)的静态类,并通过公共属性访问变量。