【问题标题】:Are variables in the main methods static主要方法中的变量是静态的吗
【发布时间】:2011-02-08 18:08:06
【问题描述】:

众所周知,静态方法只能对静态成员起作用。

public static void Main()
{
    Test t1 = new Test();
}

这里Main 方法是静态的,但我没有将t1 声明为静态。它是隐式静态的吗?

【问题讨论】:

    标签: c# .net static


    【解决方案1】:

    不,它是一个 本地 变量。无论是在静态方法还是实例方法中声明,局部变量的行为方式都是一样的。

    作为一个非常粗略的指南(捕获的变量等会带来复杂性):

    • 实例变量:每个实例一个变量
    • 静态变量:类型本身的一个变量
    • 局部变量(包括参数):每个方法调用一个单独的变量

    【讨论】:

    • 此答案已被接受。你只是还没有点击它:-D
    【解决方案2】:

    众所周知,静态方法只能作用于静态成员

    这不是事实;这是谎言。没有任何限制;静态方法对其类型的所有成员具有完全访问权限:

    class C 
    {
        private int x;
        static C Factory()
        {
            C c = new C();
            c.x = 123;
        }
    }
    

    Factory 是一个静态方法;它可以访问任何 C 实例的私有实例成员。

    【讨论】:

    • @Eric:正如 Jon 所说,这是一个局部变量,它只在 C 方法中具有作用域。所以我仍然相信“静态方法只能对静态成员起作用”。你说什么。
    • @vaibhav:我给出了一个静态方法在非静态成员上工作的合法示例。因此,静态方法不能只对静态成员起作用。
    • @vaibhav:也许让 Eric 的观点完全明确会有所帮助:xC 类型的实例成员,但这个实例成员在静态方法 Factory 中是合法使用的. c 是本地的这一事实与这一点无关(例如,它可以很容易地作为参数传递给方法);重要的是使用成员x 是完全有效的,即使它不是静态成员。当然,如果您的反对意见确实是这个意思,则您不能在不提供实例的情况下使用实例成员。
    猜你喜欢
    • 2012-05-25
    • 2015-03-26
    • 2016-03-22
    • 2016-07-02
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    相关资源
    最近更新 更多