Как узнать имя класса статических методов

У меня есть класс, и у него есть некоторые статические методы. У меня также есть другой класс, наследующий мой первый класс, как показано ниже;

public class Business
{
    public static DataTable Get()
    {
    }
}

public class Model : Business
{
    public int ID { get; set; }
    public string CompanyName { get; set; }
}

Я использую это как ниже;

Model.Get();

Внутри метода Do я пытаюсь поймать тип класса Model. Я могу поймать тип бизнес-класса, как показано ниже внутри метода Do;

public static DataTable Get()
{    
    Type t = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType;
}

Но я не могу поймать тип класса Модель. Как я могу это сделать?

Примечание. Метод Get в бизнес-классе выбирает столбцы, из которых вызывается класс. Вот почему мне нужно имя класса модели. Потому что имя класса Model будет именем таблицы, и он будет выбирать столбцы из таблицы Model.

Примечание 2: Обычно я использую это как;

Business.Get<Model>();

и я могу получить все данные из таблицы моделей. Но я стараюсь использовать это как;

Model.Get();

2 ответа

Решение

Ты не можешь Там нет ничего под названием B.Do(), Это косвенно означает, что A.Do(),

Do статический метод, определенный в A, Нет метаданных B существуют в Do метод, как это определено в A,

Возможность звонить B.Do(); это просто удобство, которое предоставляет вам компилятор C#. Обратите внимание, что resharper предупредит вас об использовании члена базового класса с использованием производного типа.

Обратите внимание, что даже если вы пишете

B.Do();

Компилятор преобразует его в

call A.Do// Call IL

Обновление: Что касается обновленного вопроса, я рекомендую вам использовать методы экземпляра, а не статические методы.

Model model = new Model();
model.Get();

Внутри вы можете использовать GetType().Name чтобы получить имя класса текущего экземпляра.

public class Business
{
    public DataTable Get()
    {
         string className = this.GetType().Name;
    }
}

Нет никакого наследования метода, когда это происходит static методы. призвание Do() метод в B занятия разрешены только для удобства, я считаю. Я полагаю, что ваш звонок B.Do() составлен в A.Do() (так как B класс не содержит Do() объявление метода). Вот почему ваш фрагмент возвращается A,

Для того, чтобы ваш метод вернулся B Вы должны написать:

public class A
{
    public static void Do()
    {
    }
}

public class B : A
{
    public static void Do()
    {
    }
}
Другие вопросы по тегам