Да, но это взлом, и вы не должны этого делать!
Тем не менее, вы можете сделать это через класс StackTrace
:
StackTrace stackTrace = new StackTrace();
if (stackTrace.GetFrame(1).GetMethod().DeclaringType.Name == "A")
{
// Class A called us
}
Мы запрашиваем трассировку стека для первого кадра стека (0-й кадр стека является текущим), потому что мы следуем за методом, вызвавшим этот метод. Вы можете использовать другие свойства экземпляра MethodBase
, возвращаемого вызовом GetMethod
, чтобы найти другую информацию, такую как имя метода.
гораздо лучший способ сделать это - вместо этого модифицировать конструктор, чтобы принимать дополнительные аргументы для изменения поведения формы. Эти аргументы должны инкапсулировать поведение формы , например, вы можете передать логический флаг, указывающий, отключены ли определенные элементы управления, или текстовое поле для настройки заголовка формы.
Вы не должны заставлять форму изменять свое поведение в зависимости от вызывающей стороны, поскольку это затрудняет повторное использование формы в других ситуациях.