Type-Safe Enum Patternに従って、小さなタイプ セーフな列挙型クラスを作成しました。メイン ダイアログが最初に呼び出されるとき、それはInitializeComponentを呼び出した後、別のクラスのコンストラクターを呼び出します。このコンストラクターは、そのクラス変数の 1 つをタイプ セーフな列挙型クラスの静的インスタンスの 1 つに設定しようとします。問題は、これらのインスタンス (およびそのように見えるクラス) がすべて null であるため、プログラムがクラッシュすることです。
プログラムにそのクラスとそのすべてのインスタンスを最初に構築させるにはどうすればよいですか? プログラムの開始時に静的インスタンスが作成されていると思っていたので、少し混乱していますが、この場合はなぜそれを行わないのですか?
私が失敗しているコードの要約版は次のとおりです 。タイプセーフな列挙型パターンの実装:
public sealed class Types
{
public static readonly Types INVALID = new Types(-1, "Invalid");
... (other static instances and other implementations of the type-safe enum pattern)
}
メインダイアログの初期化:
public dlgMain()
{
InitializeComponent();
m_OtherClass = new OtherClass();
...
}
OtherClass のコンストラクター
public OtherClass()
{
m_eType = Types.INVALID; // Crash!! the entire type-safe enum class and its static members are null!
...
}
編集:わかりました、ここに問題がありました、
public sealed class Types
{
public static readonly Types INVALID = new Types(-1, "Invalid");
... (other static instances)
private static Dictionary<string, Types> mappings = new Dictionary<string, Types>(6); // There are 6 static types
private Types(int val, string name)
{
m_value = value; m_name = name;
mappings[name] = this; // This was causing the error, mappings is null
}
}