其众所周知的事实是,静态方法只能在静态成员上工作。主要方法中的变量是静态的
public static void Main()
{
Test t1 = new Test();
}
这里Main
方法是静态的,但我还没有宣布t1
为静态的。它是隐式静态的吗?
其众所周知的事实是,静态方法只能在静态成员上工作。主要方法中的变量是静态的
public static void Main()
{
Test t1 = new Test();
}
这里Main
方法是静态的,但我还没有宣布t1
为静态的。它是隐式静态的吗?
不,这是一个本地变量。局部变量的行为方式与静态方法或实例方法中声明的方式相同。
作为非常粗糙指南(捕获的变量等介绍的并发症):
它是一个众所周知的事实,静态方法只能在静态成员上工作
这不是事实;这是虚假的。没有任何限制;静态方法可以完全访问它们类型的所有成员:
class C
{
private int x;
static C Factory()
{
C c = new C();
c.x = 123;
}
}
工厂是静态方法;它有权访问C的任何实例的私有实例成员。
@Eric:正如Jon所说,这是一个局部变量,它只会在C方法中有作用域。所以我仍然相信'静态方法只能在静态成员上工作'。你说什么。 – 2010-04-21 14:37:55
@vaibhav:我给出了一个在非静态成员上工作的静态方法的合法示例。因此,静态方法不能只适用于静态成员。 – 2010-04-21 14:44:04
@vaibhav:或许让Eric的观点完全显式化会有所帮助:'x'是'C'类型的实例成员,而这个实例成员在静态方法'Factory'中合法使用。 “c”是一个本地的事实与这一点无关(例如,它可能很容易被作为参数传递给该方法);重要的是,即使它不是一个静态成员,使用成员'x'也是完全有效的。如果没有提供实例,则不能使用实例成员,当然,如果这是您反对意见的真正含义。 – kvb 2010-04-21 15:52:41
此答案已被接受。你只是还没有点击它:-D – 2010-04-16 09:20:36