每次调用方法时都会初始化C#静态方法的变量吗?

时间:2016-09-17 10:53:09

标签: c# static-methods

在下面的示例中,每次调用静态Flog.Log()函数时都会创建一个新的StringBuilder(255),还是仅在第一次调用该方法时创建它?

public class Flog {

    public static void Log(FlogType flogType, string msg, params System.Object[] p) {

        StringBuilder sb = new StringBuilder(255);
        sb.Length = 0;
        sb.AppendFormat(msg, p);
        Log(flogType, sb.ToString());
    }
}

我意识到我可以使用静态成员变量解决这个问题。

编辑:问题的目的是优化之一 - 在某些语言中,StringBuilder sb变量的初始化只会发生一次。

2 个答案:

答案 0 :(得分:1)

  

每次静态时都会创建一个新的StringBuilder(255)   调用Flog.Log()函数,或者只创建第一个函数   调用该方法的时间?

每次调用名为static的静态方法时都会创建它。

只创建一个类的sb个成员。因此,如果StringBuilder将是该类的静态字段,则unsigned int将仅创建一次。

答案 1 :(得分:0)

根据此post

  

C#不支持静态局部变量(在方法范围内声明的变量)。