Java
からC#
次の質問があります。InJava私は次のことができます:
public class Application {
static int attribute;
static {
attribute = 5;
}
// ... rest of code
}
コンストラクターからこれを初期化できることは知っていますが、これは私のニーズに合いません(オブジェクトを作成せずにいくつかのユーティリティ関数を初期化して呼び出したい)。 C#はこれをサポートしていますか?はいの場合、どうすればこれを行うことができますか?
前もって感謝します、
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;
}
このように静的コンストラクタブロックを書くことができます。
static Application(){
attribute=5;
}
これは私が考えることができるものです。
特定のシナリオでは、次のことができます。
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;
}
}
私は何か他のものが便利だと思います。変数の初期化に複数の式/文が必要な場合は、これを使用してください!
static A a = new Func<A>(() => {
// do it here
return new A();
})();
このアプローチはクラスに限定されません。
-静的コンストラクターにはパラメーターがありません。
-静的クラスには、静的コンストラクターを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();
}
}
}
出力:
これは静的コンストラクタです。
これは主な機能です。