static int _i;
static void Display()
{
//operates on _i;
}
和
static int _i;
void Display()
{
//operates on _i;
}
哪些方案特定于方法的静态 - 非静态问题?
编辑;注意:这个问题不是关于静态和非静态方法之间的差异,正如许多人似乎回答的那样。问题是我应该担心差异的情景/用例是什么。为了清楚起见,请参阅@ ziesemer的答案,它似乎正好解决了这个问题。
答案 0 :(得分:6)
存在细微差别,实例(非静态)版本使用名为this
的“隐藏”参数实现。由于它不会用于访问静态字段,因此在这里使用静态方法稍微经济一些。
一般建议是:如果方法可以是静态的,那么将其设为静态。但这更多的是表现出明确的意图而不是表现。
答案 1 :(得分:2)
非静态函数允许您创建包含函数的类的子类,为一个或多个方法提供重写方法 - 提供可扩展性和自定义选项。这不适用于非静态函数。另一方面,非静态函数要求您在调用其函数之前首先创建该类的实例。
我还会重新审视为什么你有一些静态变量,并鼓励你重新访问 - 而不是让一切都是非静态的。这将允许您在同一运行时内拥有多个独立的所有实例。通过使变量保持静态,您实际上是强制每个人使用相同的配置(或者您存储的变量) - 即使它们创建了包含类的多个实例。
答案 2 :(得分:0)
当在类上调用非静态方法时,它会将相关对象作为不可见的第一个参数“this”给出,并按值传递;当在结构上调用非静态方法时,会给它一个不可见的第一个参数“this”,通过引用传递。该函数将被传递,无论函数是否实际使用它,因为调用者在许多情况下无法知道函数是否实际使用该参数。因此,函数必须期望调用者传入“this”,不知道它将不会被使用,因此如果函数不使用“this”,它必须忽略第一个传入的参数。因此,即使调用者知道该函数不会使用“this”,它也必须传入一个额外的参数才能忽略该函数。