Maison >développement back-end >C++ >Pourquoi le premier paramètre d'une méthode d'extension C# ne peut-il pas être un paramètre « ref » ?
Méthodes d'extension C# : pourquoi le premier paramètre ne peut pas être ref
(principalement)
Les méthodes d'extension ajoutent élégamment des fonctionnalités aux types existants sans altérer leur code source. Cependant, une limitation clé existe : le premier paramètre, représentant l'instance sur laquelle la méthode opère, ne peut pas être un paramètre ref
(avec les exceptions indiquées ci-dessous).
La raison derrière la restriction
Le mot-clé ref
permet à une méthode de modifier directement la valeur d'une variable passée en argument. Dans un appel de méthode standard, cela est parfaitement acceptable. Mais avec les méthodes d'extension, le premier paramètre représente implicitement l'objet auquel l'extension est appelée. Définir ce paramètre ref
changerait fondamentalement le fonctionnement des méthodes d'extension.
Une méthode d'extension étend le comportement d'un type ; il ne remplace ni ne crée une nouvelle instance. Autoriser un paramètre ref
sur le premier argument permettrait effectivement à la méthode d'extension de remplacer l'objet d'origine par un objet complètement différent, rompant ainsi le concept de base des méthodes d'extension.
Exemple illustratif
Envisagez une méthode régulière :
<code class="language-csharp">public static void Modify(ref MyClass obj, MyClass newObj) { obj = newObj; //Directly replaces the original object }</code>
Maintenant, imaginez une méthode d'extension analogue (hypothétiquement autorisée) :
<code class="language-csharp">public static void ModifyExtension(this ref MyClass obj, MyClass newObj) { obj = newObj; //Would replace the original object }</code>
Cette méthode d'extension hypothétique ne modifierait pas l'original obj
mais attribuerait plutôt un nouvel objet à la variable le référençant. Ce comportement est incompatible avec l'objectif prévu des méthodes d'extension.
C# 7.2 et types valeur : une exception
Bien que la restriction s'applique généralement aux types référence (classes, interfaces), C# 7.2 a introduit une exception pour les types valeur (structs). Avec les structures, utiliser ref
sur le premier paramètre est autorisé.
Cela permet de créer des méthodes d'extension pouvant modifier l'état interne d'une structure. Cependant, il est essentiel de se rappeler que cette exception s’applique uniquement aux types valeur, et non aux types référence. Le principe de base de la préservation de l'instance d'origine reste pour les types de référence.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!