【发布时间】:2011-02-08 18:08:06
【问题描述】:
众所周知,静态方法只能对静态成员起作用。
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;
}
}
Factory 是一个静态方法;它可以访问任何 C 实例的私有实例成员。
【讨论】:
x 是 C 类型的实例成员,但这个实例成员在静态方法 Factory 中是合法使用的. c 是本地的这一事实与这一点无关(例如,它可以很容易地作为参数传递给方法);重要的是使用成员x 是完全有效的,即使它不是静态成员。当然,如果您的反对意见确实是这个意思,则您不能在不提供实例的情况下使用实例成员。