Как узнать имя класса статических методов
У меня есть класс, и у него есть некоторые статические методы. У меня также есть другой класс, наследующий мой первый класс, как показано ниже;
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()
{
}
}