У меня есть базовый класс, у которого есть метод, который выполняется производными классами.
Метод вызывается конструктором производного класса и некоторыми методами или свойствами в нем.
Мне нужно определить, пришел ли он из конструктора экземпляра этого производного класса или после него (во время выполнения).
Следующий пример объясняет, что мне нужно:
public class Base
{
public Base()
{
}
protected void OnSomeAction(object sender)
{
// if from derived constructor EXIT, else CONTINUE
}
}
public class Derived : Base
{
public void Raise()
{
base.OnSomeAction(this); // YES if not called by constructor
}
public Derived()
{
base.OnSomeAction(this); // NO
Raise(); // NO
}
}
class Program
{
static void Main(string[] args)
{
var c = new Derived(); // NO (twice)
c.Raise(); // YES
}
}
Проблема в том, что я не могу изменить подпись или аргументы, потому что я не могу изменить производные классы. По сути, я подумал о том, чтобы определить, полностью ли создан производный класс (отправитель).
Итак, реализация такая, как есть. Я не могу делать изменения в базовом классе, которые нарушают производные классы. Я могу вносить изменения только в базовый класс: /
Это возможно каким-то образом, хорошо или нет? К сожалению, приветствуется даже некоторая магия отражения или подобный хакерский подход, так как это необходимо: /.
Спасибо!