【问题标题】:Static code blocks静态代码块
【发布时间】:2012-01-17 13:09:52
【问题描述】:

JavaC# 我有以下问题: 在java中我可以做到以下几点:

public class Application {
    static int attribute;
    static {
        attribute = 5;
    }
   // ... rest of code
}

我知道我可以从构造函数初始化它,但这不符合我的需要(我想初始化并调用一些实用程序函数而不创建对象)。 C# 支持这个吗?如果是,我该如何完成?

提前致谢,

【问题讨论】:

    标签: c# .net static


    【解决方案1】:
    public class Application
    {     
    
        static int attribute;     
        static Application()
        {         
             attribute = 5;     
        }    // removed
    }
    

    您可以使用 C# 等效的 static constructors。请不要将其与常规构造函数混淆。常规构造函数前面没有 static 修饰符。

    我假设您的 //... rest of the code 也需要运行一次。如果你没有这样的代码,你可以简单地这样做。

     public class Application
     {     
    
        static int attribute = 5;
     }
    

    【讨论】:

    • @parapura 这将创建 Application 对象的实例,我想在不创建对象的情况下运行静态块
    • @GETah 它不会...注意static
    • @parapurarajkumar 什么时候会声明'attribute=5;'语句被执行?
    • @RandomUser:静态代码(在静态构造函数中或在静态成员的默认值中)在第一次访问类之前运行(例如通过创建实例对象或访问/调用静态成员)。如果你从不使用这个类,它的静态代码将永远不会运行;如果你在程序进行到一半时才使用该类,那么静态代码将在那个时候运行。
    • @CBHacking static 据我所知,是在加载程序集后立即调用的。即使从未访问过该类。
    【解决方案2】:

    你可以像这样写一个静态构造器块,

    static Application(){
     attribute=5;
    }
    

    这是我能想到的。

    【讨论】:

    • 这将创建一个Application对象的实例,我想在不创建对象的情况下运行静态块
    • @GETah:因为使用了静态关键字,所以不会。
    • "在创建第一个实例或引用任何静态成员之前,会自动调用静态构造函数来初始化类。" msdn.microsoft.com/en-us/library/k9x6w0hc(v=vs.80).aspx查看此页面
    【解决方案3】:

    在您的特定场景中,您可以执行以下操作:

    public class Application { 
        static int attribute = 5;
       // ... rest of code 
    }
    

    更新:

    听起来你想调用一个静态方法。你可以这样做:

    public static class Application {
        static int attribute = 5;
    
        public static int UtilityMethod(int x) {
            return x + attribute;
        }
    }
    

    【讨论】:

      【解决方案4】:

      我发现其他有用的东西。如果您的变量需要多个表达式/语句来初始化,请使用它!

      static A a = new Func<A>(() => {
         // do it here
         return new A();
      })();
      

      这种方法不限于类。

      【讨论】:

        【解决方案5】:

        -静态构造函数没有任何参数。
        -一个静态类只能包含一个静态构造函数。
        - 当我们运行程序时,首先执行一个静态构造函数。

        示例:

        namespace InterviewPreparation  
        {  
            public static class Program  
            {  //static Class
                static Program()  
                { //Static constructor
                    Console.WriteLine("This is static consturctor.");  
                }  
                public static void Main()  
                { //static main method
                    Console.WriteLine("This is main function.");  
                    Console.ReadKey();  
                }  
            }  
        }  
        

        输出:
        这是静态构造函数。
        这是主要功能。

        【讨论】:

        • 欢迎来到 Stackoverflow。
        猜你喜欢
        • 2012-10-30
        • 2013-05-26
        • 2016-08-21
        • 2013-07-29
        • 2010-09-25
        • 1970-01-01
        • 1970-01-01
        • 2013-01-04
        • 1970-01-01
        相关资源
        最近更新 更多