Dans une méthode non statique, je pourrais utiliser this.GetType()
et il retournerait le Type
. Comment puis-je obtenir le même Type
dans une méthode statique ? Bien sûr, je ne peux pas simplement écrire typeof(ThisTypeName)
parce que ThisTypeName
n'est connu qu'en cours d'exécution. Merci !
Celui-ci fonctionne bien. Merci :) Il n'est pas très cher car il sera appelé assez rarement.
16 votes
Vous êtes dans un contexte STATIQUE et ne pouvez pas écrire typeof(ThisTypeName) ? Comment ?
1 votes
Il n'y a rien qui ressemble à un "runtime" à l'intérieur d'une méthode statique (en supposant que vous ne parlez pas d'un argument qui est passé à une méthode statique). Dans ce cas, vous pouvez simplement dire typeof(RelevantType) .
2 votes
Une méthode statique ne peut pas être virtuelle. Vous connaissez déjà le type.
7 votes
Il y aura de nombreuses classes dérivées d'une classe abstraite. La classe abstraite de base possède un dictionnaire statique<Int, Type>. Ainsi, les classes dérivées s'enregistrent dans les constructeurs statiques (dic.Add(N, T)). Et oui, je connais le type :) Je suis juste un peu paresseux et n'aime pas remplacer le texte et je me demandais si "T" peut être déterminé dans le temps d'exécution. Veuillez excuser mon mensonge, car il était nécessaire pour simplifier la question. Et ça a marché ;) Il y a une solution acceptée maintenant. Merci.
0 votes
Une sous-classe hérite des méthodes statiques de sa super-classe, non ? Ne serait-il pas logique qu'une méthode statique de la superclasse soit utile à toutes ses sous-classes ? Statique signifie simplement sans instance, le principe de code commun dans une classe de base commune s'applique-t-il aux méthodes statiques comme aux méthodes d'instance ?
0 votes
Voici une approche différente, qui repose sur l'examen d'un suivi de pile pour permettre à la méthode statique de la classe de base de connaître le type de l'appelant : stackoverflow.com/questions/3064227/
0 votes
@BrunoReis, Il est probablement dans un contexte statique dans la méthode actuelle... mais probablement pas un cadre ou deux plus haut dans la pile d'appels. Mais voici un scénario réel. WPF. Vous avez un contrôle lié à une propriété statique sur un objet de classe non statique dans votre DataContext. Maintenant, dans le 'get' de votre propriété statique, vous êtes "techniquement" dans un contexte statique, mais vous, en tant que programmeur, savez qu'il y a un objet non-statique REEL qui pourrait être hérité de votre classe de base avec la propriété statique... Bien sûr, la réponse ici est probablement de ne pas utiliser de propriété statique... mais vous voyez le point.
0 votes
Je suis tombé sur ce document en étant dans la même situation. Réfléchissez :
List<A> typesOfA; abstract class A { static RegisterA { typesOfA.Add(THISTYPE); } }
.