La différence entre l'Assemblage.GetExecutingAssembly() et typeof(programme).Assemblée
Quelle est la différence entre Assembly.GetExecutingAssembly()
et typeof(program).Assembly
?
Eh bien, ils vous donnent des réponses différentes si
Il serait plus logique si votre question contenait plus d'informations sur ce que vous voulez faire. Comme il se trouve que vous êtes plutôt du genre à poser la question "quelle est la différence entre les oranges et les pommes?"
program
n'appartient pas à l'exécution de l'assemblée... (Par exemple, si vous appelez à partir d'une bibliothèque de classe.) Avez-vous lu la documentation de GetExecutingAssembly
? Ce n'est pas vraiment clair ce qui est source de confusion.Il serait plus logique si votre question contenait plus d'informations sur ce que vous voulez faire. Comme il se trouve que vous êtes plutôt du genre à poser la question "quelle est la différence entre les oranges et les pommes?"
OriginalL'auteur Ravi Karthik | 2013-03-14
Vous devez vous connecter pour publier un commentaire.
En supposant
program
est dans l'assembly en cours d'exécution, ils doivent tous retourner la même valeur. Cependant,typeof(program).Assembly
devrait avoir une meilleure performance, depuisAssembly.GetExecutingAssembly()
ne une pile à pied. Dans un micro test sur ma machine, l'ancien a pris environ 20ns, alors que le second est 30x plus lent au sujet de 600ns.Si vous contrôlez tout le code je pense que vous devriez toujours utiliser
typeof(program).Assembly
. Si vous avez fourni le code source que d'autres personnes pourraient intégrer dans leurs assemblées, vous devez utiliserAssembly.GetExecutingAssembly()
.GetExecutingAssembly
est insérée et inattendue de l'assemblée de retour? Comme si une classe dérivée dans AssemblyB appelle une instance méthode héritée de la classe de base dans AssemblyA, et que la méthode est un one-liner àGetExecutingAssembly
, peut-on être sûr AssemblyA est de retour?Je suis intéressé de savoir comment vous avez fait le micro de référence!
href="https://benchmarkdotnet.org/" >benchmarkdotnet.org
OriginalL'auteur Mike Harder
Appel
Assembly.GetExecutingAssembly()
sera de retour l'assemblée contenant la méthode qui appelleAssembly.GetExecutingAssembly()
.Appelant par exemple
typeof(string).Assembly
sera de retour mscorlib.dll parce qu'il contient le typeString
.D'autre part, si vous avez un projet appelé MyProject et quelque part dans ce projet, vous appeler
Assembly.GetExecutingAssembly()
il sera de retour à l'Assemblée instance représentant MyProject.dllEspère que cela clarifie.
OriginalL'auteur Arturo Martinez
De l'assemblée.GetExecutingAssembly():
Obtient l'assembly qui contient le code qui est actuellement en cours d'exécution.
L'exemple suivant obtient l'assemblée de de la cours d'exécution de code.
typeOf():
C'est principalement en usage dans la réflexion.
L'opérateur typeof est utilisé pour obtenir le Système.Objet de Type pour un type. Un typeof expression est de la forme:
Pour obtenir le type à l'exécution d'une expression, vous pouvez utiliser le .NET Framework méthode GetType.
Sortie
OriginalL'auteur Shreyos Adikari
Code suivant explique les différences.
Puisque la chaîne est définie dans mscorlib assemblée son nom complet est retourné. Si le nom de l'assembly sera retourné lorsque le type est défini. Si je passe ma classe où je suis exécution de ce code,
OriginalL'auteur RotatingWheel