【发布时间】:2010-09-09 12:37:38
【问题描述】:
几天前我发布了一个类似的问题,但它更适合任何 *.Designer.cs 文件。这个问题面向类中全局变量的声明和初始化。据我所知,将所有全局变量放在类定义的开头,然后以任意顺序放置其余代码(我更喜欢 Getters 和 Setters,然后是构造函数,然后是事件,然后是杂项函数)。好吧,我已经看到它完成了,并且我自己在声明时设置了全局变量的地方完成了它。
我不是指:
ClassA clA = new ClassA();
我指的是:
private int nViewMode = (int)Constants.ViewMode.Default;
现在,我听到人们说并且我在某些层面上同意它,即这些变量的初始化,那些在声明变量时不需要new 语句的变量,应该在构造函数或初始化函数。然而,当他们这么说时,他们可能意味着前面的陈述很好,但不是下面的:
走错路
private int nTotal = 100;
private int nCount = 10;
private int nDifference = nTotal - nCount;
可能的正确方法
private int nTotal = 100;
private int nCount = 10;
private int nDifference = 0;
void ClassConstructor()
{
nDifference = nTotal - nCount;
}
我的问题是:
在这种情况下,最常见/标准的做法是什么? 两者的优缺点是什么? 这些问题是否仅与某些语言相关而不与其他语言相关?
我在打字时想到的最后一个问题,这就是原因。在 Visual Studio 2008 中,我似乎可以在全局变量声明上放置断点,而我认为我在大学时曾经编写 C++ 时不能。另外,我相信在大学里,你不能使用在当前变量之前立即声明的变量,但话又说回来,那是在 C++ 中。所以我不确定这些问题是否只适用于 MSVS 产品(我们在大学里使用过 Borland)、较新的编译器,或者其他什么不适用。如果有人有任何见解,不胜感激。谢谢。
【问题讨论】:
-
那不是全局变量,只是普通的成员变量。另外,我不会写
private int nDifference = 0;,我只会写private int nDifference;,因为不需要= 0。 -
恕我直言,至于变量声明。仅在构造函数中声明字段并设置其值。为了获得更好的代码,我建议只在原地声明 const。它带来了简单的代码顺序和可理解性
-
在声明中初始化值与在构造函数中初始化相同——编译器可以做到这一点。我在构造函数中看到的唯一优点是,如果重要的话,您可以以显式的初始化顺序(在其他代码之前/之后)进行控制。
-
@ho1 - 我放 = 0 的原因是因为对于某些语言/编译器,我记得如果你没有将整数初始化为一个值,它可以给出内存中的任何内容,这可能是 -143255346363 或任何情况。而且我可能错了,但我一直认为成员变量是全局变量,因为它们用于该类的每个函数。但是,如果当我说全局时,每个人都想到了整个项目中使用的变量,我很抱歉。
-
@ILya - 是的,我也是这么想的。我想获得“程序员社区”的意见,这样当/如果我换工作时,我看起来就不会像个傻瓜。 :) 谢谢。
标签: c# initialization global-variables declaration