にあるかどうかを確認する方法クラスSubがその基本クラスSuperのコンストラクタを呼び出している場合、Superのコンストラクタだけの呼び出しではないことを伝える方法はありますか?あなた自身のコンストラクタ、または基本クラスのコンストラクタがc#
私はディスクからオブジェクトにデータをロードしています。すべてのフィールドがリフレクションを使用してnullでないことを確認したいと思います。しかし、ベースコンストラクタを呼び出す場合、すべてのコンストラクタが終了するまでこれをチェックするのは適切ではありません。例:
class Super
{
string s;
float? f;
public Super(List<string> lines)
{
//initialize s and f based on lines
if (notFromSubclassConstructor))
{
AssertInitialized(this);
}
}
public static void AssertInitialized(Super super)
{
// Iterate through every field and make sure it isnt null
// I already know how to do this part. If we find a null
// field we throw an exception.
}
}
class Sub : Super
{
string something;
int? somethingElse;
public Sub(List<string> lines)
: base(lines) //we dont want to AssertInitialized inside here, we arent done yet!
{
//initialize blah blah
if (notFromSubclassConstructor))
{
AssertInitialized(this);
}
}
}
私はそれが醜いから来ていることを示す何らかのブール値を渡すことは避けたいと思います。私は何とか反射や他の方法でこれを行うことができますか?代替パラダイムもお勧めします。
反射はブール値よりもはるかに遅くなります。 – Steve
これを最後に行う必要がある場合は、元のクラスのコンストラクタの末尾に配置し、すべての子コンストラクタで最後にbase()を呼び出します。 – James
@Steveどのようにすべてのフィールドをチェックするためにブール値を使用するのですか?ここでの利点は、null可能なフィールドを持つことができ、検証コードを変更する必要がないことです。 – Lucina