web-dev-qa-db-ja.com

静的コードブロック

JavaからC#次の質問があります。InJava私は次のことができます:

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

コンストラクターからこれを初期化できることは知っていますが、これは私のニーズに合いません(オブジェクトを作成せずにいくつかのユーティリティ関数を初期化して呼び出したい)。 C#はこれをサポートしていますか?はいの場合、どうすればこれを行うことができますか?

前もって感謝します、

61
GETah
public class Application() 
{     

    static int attribute;     
    static Application()
    {         
         attribute = 5;     
    }    // ..... rest of code 
}

C#と同等の static constructors を使用できます。通常のコンストラクターと混同しないでください。通常のコンストラクターの前にはstatic修飾子がありません。

私はあなたの//... rest of the codeも1回実行する必要があります。そのようなコードがない場合は、単にこれを行うことができます。

 public class Application()
 {     

    static int attribute = 5;
 }
113

このように静的コンストラクタブロックを書くことができます。

static Application(){
 attribute=5;
}

これは私が考えることができるものです。

12
Ajai

特定のシナリオでは、次のことができます。

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;
    }
}
2
Phil Klein

私は何か他のものが便利だと思います。変数の初期化に複数の式/文が必要な場合は、これを使用してください!

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

このアプローチはクラスに限定されません。

1
ice1000

-静的コンストラクターにはパラメーターがありません。
-静的クラスには、静的コンストラクターを1つだけ含めることができます。
-プログラムを実行すると、静的コンストラクターが最初に実行されます。

例:

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

出力:
これは静的コンストラクタです。
これは主な機能です。

1