-1

メソッドで静的変数を初期化できますか?次のコードは有効ですか?ありがとうございました!

internal static class Common
{

    internal static int TimeOut;
    internal static string Name;


    internal static void Initialize()
    {
        TimeOut = Config.Read("timeout");
        Name = Config.Read("Name");
    }
}
4

2 に答える 2

6

簡単な答えはイエスです。

本当に静的変数を初期化する場合(たとえば、静的クラスを使用する前に実行時に値を設定する場合)、静的コンストラクターを使用します。

internal static class Common
{
    internal static int TimeOut;
    internal static string Name;

    static Common()
    {
        TimeOut = Config.Read("timeout");
        Name = Config.Read("Name");
    }
}

静的コンストラクターにはアクセス修飾子がなく、パラメーターがない必要があることに注意してください。

静的コンストラクターの詳細については、このMSDNの記事を参照してください。

于 2012-05-18T18:59:04.837 に答える
4

はい、できます。あなたのコードは完全に有効です。

そうは言っても、初期化の前にそれらが使用およびアクセスされるのを防ぐため、静的コンストラクターまたはインラインで初期化する方がよい場合がよくあります。

あなたの場合、コード(Config.Read)を実行しているので、これには静的コンストラクターを使用する必要があります。

static Common()
{
    TimeOut = Config.Read("timeout");
    Name = Config.Read("Name");
}

また、静的な値にはフィールドの代わりにプロパティを使用することをお勧めします。これは、特にAPIの将来を保証するという点で、いくつかの利点があります。これは次のように簡単です。

internal static int TimeOut { get; set; }
internal static string Name { get; set; }

あなたの場合、これらは初期化時に一度読み取られるように見えるので、次を使用することもできます。

internal static int TimeOut { get; private set; }
internal static string Name { get; private set; }
于 2012-05-18T18:58:44.087 に答える