С# static "this"

Есть ли способ в статическом методе С# ссылаться на Type, метод определен в?

В методе экземпляра вы можете определить тип:

public void Foo()
{
    Type type = this.GetType();
}

как он будет выглядеть в статическом методе?

public static void Bar()
{
    Type type = ....?
}

Обновление: Извините, требуется уточнение: Я знаю функцию typeof(...). Я ищу ключевое слово или код, который дает мне Type без явного указания имени класса.

Обновление: Помимо ответа разработчика, который делает именно то, что я искал, есть более простой способ?

Ответы

Ответ 1

Здесь вы идете:

public static void Bar()
{
  Type type = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType;
}

Изменить: обновлено, чтобы исправить ошибку - DeclaringType является свойством.

Ответ 2

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;
   }
}

Ответ 3

class ClassA
{
    public static void Bar()
    {
        Type t = typeof(ClassA);
    }
}

Капитан Очевидный, я знаю.

Ответ 4

Почему вы не используете 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();
  }
}

Ответ 5

Вы можете использовать

 Type t = typeof ( Program );

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

Ответ 6

Это немного запутанно, но я думаю, вы также можете пойти по пути шаблона одноэлементного типа

public class Foo
{
    private static Foo _Instance = new Foo();
    public static Type Bar()
    {
        return _Instance.GetType();
    }
}

Ответ 7

Если класс является формой и он открыт (вам также нужно имя формы);

Application.OpenForms["MainForm"].GetType();