Страницы

Поиск по вопросам

вторник, 31 марта 2020 г.

Как получить название класса в котором вызываем статический метод, который он наследует от другого родительского класса

#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}"); } }

Комментариев нет:

Отправить комментарий