web-dev-qa-db-fra.com

GetType dans la méthode statique

Duplicata possible:
. NET: Détermine le type de "cette" classe dans sa méthode statique

Comment puis-je rendre GetType() accessible à partir d'une méthode static?

J'ai cette classe de base abstraite

abstract class MyBase
{
   public static void MyMethod()
   {
      var myActualType = GetType(); // this is an instance method
      doSomethingWith(myActualType);
   }
}

et une implémentation de cette classe. (Je pourrais avoir plusieurs implémentations.)

class MyImplementation : MyBase 
{
    // stuff
}

Comment puis-je faire en sorte que myActualType soit typeof(MyImplementation)?

36
Daniel A. White

C'est le modèle que j'ai utilisé.

abstract class MyBase
{
   public static void MyMethod(Type type)
   {
      doSomethingWith(type);
   }
}
3
Daniel A. White

Le "type" dans une méthode statique est toujours le type spécifique, car il n'existe pas de méthode statique virtuelle.

Dans votre cas, cela signifie que vous pouvez simplement écrire:

 var myActualType = typeof(MyBase);

Puisque le "type" de MyMethod, étant un statique, est toujours une méthode statique de MyBase.

44
Reed Copsey

Et ça?

abstract class MyBase<T>
{
   public static void MyMethod()
   {
      var myActualType = typeof(T);
      doSomethingWith(myActualType);
   }
}


class MyImplementation : MyBase<MyImplementation>
{
    // stuff
}
22
matt