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

196
15 сентября 2018, 16:30
Tickers.All();
class Tickers : Eloquent
{
}
class Eloquent
{
    public static void All()
    {
        Console.WriteLine("Класс из которого вызывали меня");
    }
}

Хочу в классе Eloquent получить название класса Tickers.

Подскажите пожалуйста)

Answer 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<Tickers>
{
}
class Eloquent<T> where T: Eloquent<T>
{
    public static void All()
    {
        Console.WriteLine($"Вызывающий класс: {typeof(T).Name}");
    }
}
READ ALSO
RefreshToken в JWT

RefreshToken в JWT

По ответам из этого вопроса я понял как создавать jwt токенНо теперь встал вопрос, как его неявно обновлять

185
Контекст выполнения операции

Контекст выполнения операции

Есть класс Dispatcher с набором public методов, которые вызываются извнеКаждый из методов - задача(Func<Task>), запускаемая в очереди (в один момент...

176
Изменить данные XML файла

Изменить данные XML файла

Нужно из xml файла получать данные, по нажатию кнопки менять значение на 2 (+2)А вот как изменять данные из файла найти не могу нормально

205
PHP цикл выводит неправильную сумму

PHP цикл выводит неправильную сумму

Я создаю цикл от 0-100 и создаю определенные условияНапример, если число делится на 3 без остатка вывести строку, но у меня также есть условие,...

203