Que signifie “ceci” dans une déclaration de méthode statique?

J’ai vu du code qui utilise le mot this clé this dans la déclaration des parameters de la fonction. Par exemple:

 public static Object SomeMethod( this Object blah, bool blahblah) 

Qu’est-ce que le mot this signifie dans ce contexte?

Cela signifie que SomeMethod() est une méthode d’extension de la classe Object .

Après l’avoir définie, vous pouvez appeler cette méthode sur toutes les instances d’ Object (même si elle est déclarée static ), comme suit:

 object o = new Object(); bool someBool = true; // Some other code... object p = o.SomeMethod(someBool); 

Le paramètre this Object fait référence à l’object sur lequel vous l’avez appelé et ne figure pas réellement dans la liste de parameters.

La raison pour laquelle elle est déclarée static alors que vous l’appelez comme une méthode d’instance est que le compilateur traduit cela en un véritable appel statique dans l’IL. Cela va au fond, donc je ne vais pas élaborer, mais cela signifie aussi que vous pouvez l’appeler comme s’il s’agissait d’une méthode statique:

 object o = new Object(); bool someBool = true; // ... object p = ObjectExtensions.SomeMethod(o, someBool); 

C’est comment vous déclarez une méthode d’extension .

Cela signifie que vous pouvez appeler SomeMethod avec .SomeMethod pour n’importe quel object. L’object avant le . sera le paramètre bla

 ssortingng s = "sdfsd"; Object result = s.SomeMethod(false); 

La méthode d’extension sera disponible sur tous les types hérités du type de this paramètre, dans ce cas, l’object. Si vous avez SomeMethod(this IEnumerable enumerable) il sera disponible sur tous les IEnumerable : comme List .