Static code blocks

2020-05-29 12:21发布

问题:

Going from Java to C# I have the following question: In java I could do the following:

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

I know I can initialize this from the constructor but this does not fit my needs (I want to initialize and call some utility functions without create the object). Does C# support this? If yes, how can I get this done?

Thanks in advance,

回答1:

public class Application
{     

    static int attribute;     
    static Application()
    {         
         attribute = 5;     
    }    // removed
}

You can use the C# equivalent static constructors. Please don't confuse it with a regular constructor. A regular constructor doesn't have a static modifier in front of it.

I am assuming your //... rest of the code need to be also run once. If you don't have such code you can just simply do this.

 public class Application
 {     

    static int attribute = 5;
 }


回答2:

You just can write a static constructor block like this,

static Application(){
 attribute=5;
}

This is what I could think of.



回答3:

In your particular scenario, you could do the following:

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

UPDATE:

It sounds like you want to call a static method. You can do that as follows:

public static class Application {
    static int attribute = 5;

    public static int UtilityMethod(int x) {
        return x + attribute;
    }
}


回答4:

I find something else useful. If your variable needs more than one expressions/statements to initialize, use this!

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

This approach is not limited on classes.



回答5:

-A static constructor doesn't have any parameter.
-A static class can contain only one static constructor.
-A static constructor executes first when we run the program.

Example:

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();  
        }  
    }  
}  

Output:
This is static constructor.
This is main function.



标签: c# .net static