J'utilise un assemblage dynamique pour créer des classes dérivées lors de l'exécution. Comment puis-je savoir, en utilisant la réflexion, si la classe de base et les méthodes individuelles de la classe de base peuvent être utilisées/appelées depuis la classe dérivée dans l'assemblage dynamique?Comment savoir si une classe/méthode est accessible à l'aide de la réflexion?
4
A
Répondre
3
Il existe un certain nombre de propriétés sur les objets MethodInfo
et Type
que vous pouvez utiliser pour interroger la visibilité.
Par exemple, pour un type que vous pouvez vérifier IsPublic
, IsPrivate
, IsNotPublic
, IsNested
, IsNestedFamOrAssembly
, et beaucoup plus.
Pour une méthode (l'objet MethodInfo
), vous avez un ensemble similaire: IsPublic
, IsPrivate
, IsFamilyOrAssembly
, etc.
donc combiner avec des informations telles que la propriété Assembly
sur un type (donc vous pouvez dire si Type1 et Type2 sont tous deux dans le même assemblage) et vous devriez être capable d'obtenir toutes les informations dont vous avez besoin.
Si le framework .NET ne permet pas vraiment de répondre directement à ma question, existe-t-il au moins une liste de règles quelque part? Par exemple, il serait facile d'oublier que juste parce qu'une classe imbriquée IsPublic ne signifie pas qu'elle est accessible, pas si la classe parente est interne. – Qwertie
Ouais, c'est le problème, il y a des règles, mais vous devrez intégrer du code pour les vérifier vous-même. Je ne suis même pas sûr d'une ressource spécifique qui énumère toutes les règles (bien que je sois sûr qu'il existe quelque part). Si je le faisais moi-même, je construirais probablement quelque chose qui traiterait les cas les plus communs, puis j'ajouterais aux autres quand je les rencontrerais. Kinda dépend cependant de qui est votre public. – ckramer