#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}"); } }
Комментариев нет:
Отправить комментарий