2010-03-06 6 views
6

Je viens de regarder cette publication: What is the best or most interesting use of Extension Methods you’ve seen?S'il vous plaît expliquer les méthodes d'extension pour moi

Je n'ai jamais entendu parler des méthodes d'extension. Est-ce qu'ils s'appliquent à toutes les langues?

Quel est le point de leur part? Dans cet article particulier, je n'ai pas compris l'exemple.

+1

Voir http://stackoverflow.com/questions/tagged/extension-methods+c%23 –

Répondre

5

Ils sont disponibles pour C# et VB. Ils vous permettent de simuler l'ajout de méthodes à des classes qui ne sont pas sous votre contrôle.

Vous pourriez, par exemple, ajouter une méthode WordCount à une chaîne.

Ainsi, au lieu de

MyStringUtils.WordCount("some string")

Vous pouvez simplement écrire "some string".WordCount().

public static class MyExtensions 
{ 
    public static int WordCount(this String str) 
    { 
     return MyStringUtils.WordCount(str); 
    } 
} 

Ceci est strictement "sucre syntaxique" et facilite la lisibilité. Vous créez essentiellement une méthode statique qui sera affichée dans IntelliSense pour le type de cible.

7

Non, elles ne s'appliquent pas à toutes les langues. Ils sont une fonctionnalité spécifique à la langue, offerte par C# et Visual Basic (d'autres langues peuvent les avoir adoptées depuis, je ne sais pas). Le but d'eux est de fournir une syntaxe pratique pour appeler des méthodes utilitaires sur une classe ou une interface. En C# 2, une méthode de service serait appelé par une classe statique, en passant l'argument de la manière habituelle:

IEnumerable<string> someStrings; 
int count = EnumerableHelpers.Count(someStrings); 

Avec des méthodes d'extension, ce qui peut être écrit plus facilement en utilisant quelque chose qui ressemble à la syntaxe normale de la méthode membre:

int count = someStrings.Count(); 

même si le comte() n'est pas membre de l'interface IEnumerable<string>. Les méthodes d'extension vous permettent donc d'apparaître à ajouter des membres à des classes ou des interfaces que vous ne contrôlez pas.

1

s'appliquent-elles à toutes les langues?

Non, mais certaines langues ont la même fonctionnalité, mais pas nécessairement sous le même nom. Ceux que je connais sont Objective-C et Groovy, où la fonctionnalité est appelée "Catégories".

Questions connexes