【问题标题】:variable in static methods inside static class静态类中的静态方法中的变量
【发布时间】:2012-06-24 03:36:12
【问题描述】:

请考虑以下代码:

1)public static class MyClass
2){
3)    public static DateTime MyMethod(DateTime dt)
4)    {
5)         DateTime temp = new DateTime();
6)         temp = dt.AddDays(1);
7)         return temp;
8)    }
9)}

对于MyMethod 的任何调用,temp 变量是否都有实例?还是因为它位于静态类中的静态方法中,而在内存中分配了一个 temp 变量实例?

谢谢

【问题讨论】:

    标签: c# .net oop c#-4.0 static


    【解决方案1】:

    temp 既不是静态变量也不是实例变量,它是一个本地 变量。声明它的方法是否是静态的绝对无关紧要:变量的作用域从它的声明点开始,到它声明的作用域的右花括号} 结束。通过MyMethod 的每个执行线程都会获得自己的temp 副本,该副本在变量范围之外的任何地方都是不可见的。

    【讨论】:

    • 谢谢亲爱的朋友。你的意思是如果我将SqlConnection 放在该方法中并打开和关闭它,那么连接将在每个线程内打开和关闭,并且每个线程都不会影响其他线程的连接?跨度>
    • @Kerezo 是的,这绝对正确:每个执行线程都有自己的变量,无论有多少线程同时访问它。
    【解决方案2】:

    对于 MyMethod 的任何调用,temp 变量是否都有实例?

    如果您的意思是“每次调用 MyMethod 都会获得一个单独的 temp 变量吗?”那么答案是肯定的。

    它是静态类中的静态方法这一事实无关紧要 - 它是一个局部变量,因此每次调用都会获得一个“新”局部变量。

    【讨论】:

    • 你说The fact that it's a static method in a static class is irrelevant 但在扩展方法中我们这样做
    • @Kerezo:“我们这样做”是什么意思?即使在扩展方法中,局部变量仍然是局部变量...
    【解决方案3】:

    temp 每次调用都有一个实例。

    顺便说一句,我无法像在 C++ 中那样在静态方法中定义静态局部变量。

    【讨论】:

      【解决方案4】:

      临时变量,即使在静态方法中,也必须声明为静态变量,否则它只是在该实例中本地创建,然后在方法调用结束时被吹走。

      【讨论】:

        猜你喜欢
        • 2011-05-30
        • 1970-01-01
        • 1970-01-01
        • 2017-01-13
        • 2011-02-13
        • 1970-01-01
        • 2013-09-08
        • 2015-02-18
        • 1970-01-01
        相关资源
        最近更新 更多