Quelques questions sur les méthodes d'extension: p>
Pourquoi les méthodes d'extension sont-elles statiques? P> LI>
Pourquoi doivent-ils être déclarés dans une classe statique? P> LI>
Que signifie le ce mot clé dans la liste des paramètres de la méthode d'extension? Comme il s'agit d'une classe statique, comment le mot clé fonctionne-t-il dans ce contexte? P> LI>
Comment l'allocation de la mémoire se produit-elle pour ces types de méthodes? p> li> ol>
5 Réponses :
La seule différence entre une méthode statique et non statique est qu'une méthode non statique reçoit un paramètre implicite - Vous ne pouvez pas utiliser le mot-clé Quelle est votre question sur l'allocation de la mémoire? Une méthode d'extension est tout comme n'importe quelle autre méthode statique, seule la syntaxe d'appel est différente. P> ceci code>. Les méthodes d'extension ne sont pas appelées dans le contexte de l'objet sur lequel la méthode est déclarée, il n'existe donc aucun moyen de les transmettre le
cette référence code>, ils doivent donc être statiques. P>
ceci code> à l'intérieur d'une méthode d'extension, j'espère que cela répond à votre troisième question. Le mot clé code> de ce code> dans la liste des paramètres est là simplement pour indiquer quel type cette méthode s'étend. P>
Hmm, ne pas que les méthodes non statiques ordinaires reçoivent également un paramètre implicite code>? Ou est-ce un détail de mise en œuvre spécifique à C ++?
@Cody Oui, ils font. Pour une raison quelconque, @Robert Harvey a édité ma réponse à quelque chose de mal et de différent de ce que je voulais dire. Je l'ai retourné maintenant.
C'est juste comment ils sont définis - avec ce mot clé précédant le premier paramètre, qui correspond à l'instance de l'objet que vous appelez la méthode sur. Pourquoi Tostring () appelé Tostring ()? Pourquoi statique est-elle utilisée pour statique? Pourquoi l'herbe est-elle verte? Je suppose que les puissances qui ont été décidées de mettre une ceci devant le premier paramètre, au lieu de venir avec une nouvelle "extension" de mot-clé à mettre en avant le nom de la méthode. P>
généré par le compilateur traduit votre code dans un appel sur la méthode statique, même si la syntaxe peut ressembler à un appel sur une méthode d'instance. Mais ce n'est pas - c'est une statique, qui n'a aucun accès aux membres privés de votre objet. p>
car il n'y a pas d'instance pour les appeler. p> li>
Je pense que c'est de limiter le nombre d'erreurs possibles s'il a été déclaré en classe non statique. P> Li>
Il dit sa méthode d'extension. Compilateur le voit et permet de l'utiliser sur le type déclaré comme ceci, à la place comme méthode statique. P> li>
Méthode d'extension L'appel n'est que du sucre syntaxique. Cet appel est converti en une méthode statique ordinaire appel dans IL. P> LI> ol>
La réponse à 1,2, et 4 est à peu près la même chose. Méthodes d'extension sont tout simplement des méthodes statiques avec un peu de sucre spécial syntactique. Ceci:
public static void DoIt(string str) { // .. } DoIt("test");
Pourquoi les méthodes d'extension statique? P> blockQuote>
Parce que vous ne pouvez pas modifier la classe d'ajouter des méthodes d'instance. Il est tout le sucre syntaxique pour faire des appels à ces méthodes plus agréable, rien de plus. P>
Pourquoi doivent-ils être déclarés dans une classe statique? P> blockQuote>
Parce que nous ne sommes pas censés créer des instances de la classe. Il est une décision de conception. Pourquoi compliquer les choses comme avoir des instances d'une classe qui a des méthodes d'extension attachées à ceux qui pourraient ne pas être encore utilisable? P>
Qu'est-ce que le mot clé this indique dans la liste des paramètres de la méthode d'extension? Comme il est une classe statique comment le « ce » travail mot-clé dans ce contexte? P> blockQuote>
Il est une méthode statique.
ce code> n'a pas de sens dans ce contexte. Le
this code> dans la signature est juste un moyen pour indiquer qu'une méthode d'extension est déclarée. P>
Comment l'allocation de mémoire se produit pour ce type de méthodes? P> blockQuote>
Confus au sujet de celui-ci. Ils sont toutes les méthodes statiques sur une classe statique. Ils sont la méthode « attribués » comme tout autre (static), il n'y a qu'une seule copie du code pour le type. P>
msdn.microsoft.com/en-us/library/bb383977.aspx
Je suis particulièrement intéressé par l'aspect de l'allocation de la mémoire des méthodes de vulgarisation, puisque LINQ les utilise partout.
Le spectacle est exécuté par compilerservices.extensionAttribute b>
Pourquoi ont-ils besoin d'être Déclaré dans une classe statique? Qu'est-ce que ce mot clé indique? < / a>
@Alexandre, @Nasmifive Quel type d'aspect de l'allocation de mémoire attendez-vous une méthode d'extension? C'est juste une méthode régulière ...