在表单中将大多数变量放在类级别是不好的做法吗?这些会被视为全局变量吗?
public partial class Form1 : Form
{
private string mode;
private int x, y;
public Form1()
{
InitializeComponent();
}
}
当我在类级别声明它们时,我在多个控件中使用变量。
答案 0 :(得分:4)
我从问题中得到的是,如果您使用的是不依赖于任何形式的个人形式,则所有这些变量都将成为该类的私有变量。如果表单是从其他地方调用的。然后它也将是私有变量。如果您真的想要进行清晰的设计,那么您可以在要向其他类公开的私有变量上创建公共属性。
通过这种方式,您可以通过创建只读属性将其他类的限制访问权限设置为私有变量,以便其他类无法修改但可以访问它。
答案 1 :(得分:2)
这些将被视为类级别的全局变量(以区别于应用程序全局变量。)在这种情况下,更重要的区别是它们是private
类。
类级别的全局变量有它们的用途,所以我绝对不会称它为坏习惯。当您计划通过property accessors公开它们时,非常适合私有类全局变量。例如:
public readonly
属性,其值由您班级内部的逻辑控制。
public
属性同时包含set
和get
个访问者(在setter中启用自定义验证逻辑。)
但是,我认为除非另有必要,否则将本地化为本地是一种好习惯。原因是你有一个属于类实例的可变状态较少,所以这样的bug可能性较小:
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();
}
答案 2 :(得分:2)
这些不被视为全局变量。它们仅在Form1类中是全局的,而不是整个程序。
答案 3 :(得分:1)
这取决于变量的用途。
如果它们仅在单一方法中使用,则它们应该是该方法的本地方法。
如果他们描述了类的状态并且在多个地方使用它们,则应将它们声明为类成员。
答案 4 :(得分:0)
他们是班级Form1
答案 5 :(得分:0)
如果不知道表单的意图是什么,很难说你所做的是好还是坏。此处显示的变量具有类范围,并且由于它们是私有的,因此它们不能在Form1
之外访问,并且不被视为“全局”。
如果您真的想要全局变量,请创建一个带有私有静态变量和公共静态访问器/ mutators(C#中的属性)的静态类,并通过公共属性访问该变量。有关示例,请参阅this answer。