Если класс Sub вызывает конструктор базового класса Super, можно ли сказать, что это не просто вызов конструктора Super?
Я загружаю данные с диска в объекты, и я хотел бы убедиться, что все поля не являются пустыми, используя отражение. Однако, если я вызываю мой базовый конструктор, то проверять это нецелесообразно, пока все конструкторы не будут завершены. Пример:
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);
}
}
}
Я бы не хотел передавать какое-то логическое значение, указывающее, откуда я, потому что это безобразно. Могу ли я сделать это как-то с помощью отражения или другими способами? Не стесняйтесь предлагать и альтернативные парадигмы.