0

拡張メソッドはそれとは何の関係もないので、質問を単純化しました。

コード スニペットは次のとおりです。

class MyClass
{
    private static readonly char[] InvalidChars = new []{'\\', '/'};


    public MyClass()
    {
        if (InvalidChars == null)
        {
             //how can this block be accessable? 
        }
    } 

}

私の質問は: InvalidChars が MyClass コンストラクターでアクセスされたときに null を返す可能性があるシナリオはありますか? 明らかにあります。それは、私のアプリケーションで見られるものだからです。私はそれがどのように可能か理解できませんが。

4

2 に答える 2

0

静的としてマークしたため、読み取り専用変数はクラスの静的コンストラクターでのみ初期化できます。

宣言で変数が初期化される場合、たとえば次のようになります。

public readonly int y = 5;

インスタンス フィールドの場合は、フィールド宣言を含むクラスのインスタンス コンストラクターで、または静的フィールドの場合は、フィールド宣言を含むクラスの静的コンストラクターで。これらは、読み取り専用フィールドを out または ref パラメーターとして渡すことが有効な唯一のコンテキストでもあります。

したがって、宣言で static キーワードを削除すると、コンストラクターで変数を初期化できるようになります。

于 2013-03-28T07:37:07.870 に答える
0

ああ、すみません、コール スタックを注意深く調べたところ、問題が見つかりました。あなたは正しかった、私のコード例は完全ではありませんでした。完全版は次のとおりです。

class MyClass
{
    private static readonly MyClass Default = new MyClass();
    private static readonly char[] InvalidChars = new []{'\\', '/'};


    public MyClass()
    {
        if (InvalidChars == null)
        {
         //how can this block be accessable? 
        }
    } 

}

nullを取得していたのも不思議ではありません。

于 2013-03-28T09:06:51.567 に答える