#c_sharp
Tickers.All();
class Tickers : Eloquent
{
}
class Eloquent
{
public static void All()
{
Console.WriteLine("Класс из которого вызывали меня");
}
}
Хочу в классе Eloquent получить название класса Tickers.
Подскажите пожалуйста)
Ответы
Ответ 1
Статические методы привязаны к определенному типу и не наследуются. В вашем случае Tickers.All() на самом деле скомпилится в Eloquent.All(), поэтому в рантайме не будет даже упоминания о Tickers. Чтобы реализовать вашу задумку, нужно немного подшаманить: Вариант 1 class Tickers : Eloquent { public static new void All() => Eloquent.All(); } class Eloquent { public static void All() { var stacktrace = new StackTrace(); var prevframe = stacktrace.GetFrame(1); var method = prevframe.GetMethod(); Console.WriteLine($"Вызывающий класс: {method.ReflectedType.Name}"); } } Либо, как прокомментировал @Grundy, посмотреть еще один способ. Если коротко, то: Вариант 2 class Tickers : Eloquent{ } class Eloquent where T: Eloquent { public static void All() { Console.WriteLine($"Вызывающий класс: {typeof(T).Name}"); } }
Комментариев нет:
Отправить комментарий