Cet article a fait l'objet d'une traduction manuelle. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. |
Traduction
Source
|
DynamicMethod, constructeur (String, Type, Type[], Boolean)
Initialise une méthode dynamique hébergée de manière anonyme, en spécifiant le nom de la méthode, le type de retour, les types de paramètre, et si les contrôles de visibilité juste-à-temps (JIT) doivent être ignorés pour les types et membres auxquels accède le langage MSIL de la méthode dynamique.
Assembly : mscorlib (dans mscorlib.dll)
public DynamicMethod( string name, Type returnType, Type[] parameterTypes, bool restrictedSkipVisibility )
Paramètres
- name
- Type : System.String
Nom de la méthode dynamique. Ce peut être une chaîne de longueur nulle, mais pas la valeur null.
- returnType
- Type : System.Type
Objet Type qui spécifie le type de retour de la méthode dynamique, ou null si la méthode n'a aucun type de retour.
- parameterTypes
- Type : System.Type[]
Tableau d'objets Type spécifiant les types des paramètres de la méthode dynamique, ou indiquant null si la méthode n'a pas de paramètre.
- restrictedSkipVisibility
- Type : System.Boolean
true pour ignorer les contrôles de visibilité JIT sur les types et membres auxquels accède le langage MSIL de la méthode dynamique, avec cette restriction : le niveau de confiance des assemblys qui contiennent ces types et membres doit être inférieur ou égal à celui de la pile des appels qui émet la méthode dynamique ; sinon, false.
| Exception | Condition |
|---|---|
| ArgumentException |
Un élément de parameterTypes est null ou Void. |
| ArgumentNullException |
name est null. |
| NotSupportedException |
returnType est un type pour lequel Type.IsByRef retourne true. |
La méthode dynamique créée par ce constructeur est associée à un assembly anonyme au lieu d'un type ou d'un module existant. L'assembly anonyme existe uniquement pour fournir un environnement de bac à sable (sandbox) pour les méthodes dynamiques, autrement dit, pour les isoler du reste du code. Cet environnement sécurise l'émission et l'exécution de la méthode dynamique par un code de niveau de confiance partiel.
Les méthodes dynamiques hébergées de manière anonyme n'ont pas automatiquement accès à tous les types ou membres private, protected ou internal (Friend dans Visual Basic). Cela est différent pour les méthodes dynamiques, qui sont associées à un type ou un module existant, qui a accès aux membres cachés dans la portée associée.
Spécifiez true pour restrictedSkipVisibility si votre méthode dynamique doit pouvoir accéder aux types et membres private, protected ou internal. Cela donne à la méthode dynamique un accès restreint à ces membres. Autrement dit, les membres peuvent être accédés uniquement si les conditions suivantes sont remplies :
-
Les membres cibles font partie d'un assembly qui a un niveau de confiance égal ou inférieur à celui de la pile des appels qui émet la méthode dynamique.
-
Le niveau d'autorisation ReflectionPermission avec l'indicateur ReflectionPermissionFlag.RestrictedMemberAccess est accordé à la pile des appels qui émet la méthode dynamique. C'est toujours vrai lorsque le code est exécuté avec la confiance totale. Pour un code de niveau de confiance partiel, c'est vrai uniquement si l'hôte accorde l'autorisation explicitement.
Important
Si l'autorisation n'a pas été accordée, une exception de sécurité est levée lorsque CreateDelegate est appelé ou lorsque la méthode dynamique est appelée, et non lorsque ce constructeur est appelé. Aucune autorisation spéciale n'est requise pour émettre la méthode dynamique.
Par exemple, une méthode dynamique créée avec restrictedSkipVisibility définie sur true peut accéder à un membre privé de tout assembly sur la pile des appels si l'accès membre restreint a été accordé à cette pile d'appels. Si la méthode dynamique est créée avec un code de niveau de confiance partiel sur la pile des appels, elle ne peut pas accéder à un membre privé d'un type dans un assembly .NET Framework, parce que ces assemblys ont un niveau Entièrement fiable.
Si restrictedSkipVisibility a la valeur false, les contrôles de visibilité JIT sont appliqués. Le code dans la méthode dynamique a accès aux méthodes publiques des classes publiques, et des exceptions sont levées s'il essaie d'accéder aux types ou membres qui sont private, protected ou internal.
Lorsqu'une méthode dynamique hébergée de manière anonyme est construite, la pile des appels de l'assembly émetteur est incluse. Lorsque la méthode est appelée, les autorisations de la pile des appels émettrice sont utilisées à la place des autorisations de l'appelant réel. Ainsi, la méthode dynamique ne peut pas exécuter à un niveau supérieur de privilèges que celui de l'assembly qui l'a émis, même si elle est passée à et exécutée par un assembly qui a un niveau de confiance supérieur.
Ce constructeur spécifie les attributs de méthode MethodAttributes.Public et MethodAttributes.Static, ainsi que la convention d'appel CallingConventions.Standard.
Remarque
|
|---|
|
Ce constructeur a été introduit dans .NET Framework version 3.5 ou une version ultérieure. |
Windows 7, Windows Vista SP1 ou ultérieur, Windows XP SP3, Windows Server 2008 (installation minimale non prise en charge), Windows Server 2008 R2 (installation minimale prise en charge avec SP1 ou version ultérieure), Windows Server 2003 SP2
Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.
Remarque