Ответ 1
Здесь вы идете:
public static void Bar()
{
Type type = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType;
}
Изменить: обновлено, чтобы исправить ошибку - DeclaringType является свойством.
Есть ли способ в статическом методе С# ссылаться на Type, метод определен в?
В методе экземпляра вы можете определить тип:
public void Foo()
{
Type type = this.GetType();
}
как он будет выглядеть в статическом методе?
public static void Bar()
{
Type type = ....?
}
Обновление: Извините, требуется уточнение: Я знаю функцию typeof(...)
. Я ищу ключевое слово или код, который дает мне Type без явного указания имени класса.
Обновление: Помимо ответа разработчика, который делает именно то, что я искал, есть более простой способ?
Здесь вы идете:
public static void Bar()
{
Type type = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType;
}
Изменить: обновлено, чтобы исправить ошибку - DeclaringType является свойством.
public class Foo {
public static void Bar() {
Type type = typeof(Foo);
}
}
Вы также можете использовать stacktrace
public class Foo {
public static void Bar() {
Type type = new StackTrace().GetFrame(0).GetMethod().DeclaringType;
}
}
class ClassA
{
public static void Bar()
{
Type t = typeof(ClassA);
}
}
Капитан Очевидный, я знаю.
Почему вы не используете typeof
?
public class Foo
{
public static void Bar()
{
Type type = typeof(Foo);
}
}
Или, как сказал разработчик, вы можете сделать это с помощью отражения, но это будет медленнее.
using System.Reflection;
public class Foo
{
public static void Bar()
{
Type type = MethodBase.GetCurrentMethod().DeclaringType();
}
}
Вы можете использовать
Type t = typeof ( Program );
Очень необычным способом было бы использовать StackTrace, используя тип последнего кадра...
Это немного запутанно, но я думаю, вы также можете пойти по пути шаблона одноэлементного типа
public class Foo
{
private static Foo _Instance = new Foo();
public static Type Bar()
{
return _Instance.GetType();
}
}
Если класс является формой и он открыт (вам также нужно имя формы);
Application.OpenForms["MainForm"].GetType();