Предположим, у нас есть 2 класса Child и класс, от которого он наследуется, Parent.
class Parent
{
public static void MyFunction(){}
}
class Child : Parent
{
}
Можно ли определить в родительском классе, как был вызван метод? Потому что мы можем назвать это двумя способами:
Parent.MyFunction();
Child.MyFunction();
Мой текущий подход пытался использовать:
MethodInfo.GetCurrentMethod().ReflectedType; // and
MethodInfo.GetCurrentMethod().DeclaringType;
Но оба, похоже, возвращают тип Parent.
Если вам интересно, что именно я пытаюсь выполнить (и почему я нарушаю основное правило ООП, согласно которому родитель не должен ничего знать о ребенке), если коротко, то это (дайте мне знать если вы хотите длинную версию):
У меня есть структура Model, представляющая некоторые из наших данных, которые сохраняются в базе данных. Все эти модели наследуются от абстрактного Parent. Этот родительский объект реализует пару событий, таких как SaveEvent, DeleteEvent и т. Д. Мы хотим иметь возможность подписаться на события, относящиеся к типу. Итак, хотя событие находится в родительском, я хочу иметь возможность сделать:
Child.SaveEvent += new EventHandler((sender, args) => {});
У меня есть все на месте, где событие фактически поддерживается словарем обработчиков событий, хэшированным по типу. Последнее, что мне нужно для работы, - это правильное определение типа Child при выполнении Child.SaveEvent.
Я знаю, что могу реализовать событие в каждом дочернем классе (даже форсировать его с помощью абстрактного), но было бы неплохо сохранить все это в родительском классе, который является классом, на самом деле запускающим события (поскольку он реализует общие функции сохранения / удаления / изменения).