Méthodes d’extension statique

Duplication possible:
Puis-je append des méthodes d’extension à une classe statique existante?

Est-il possible d’append une méthode d’extension statique à une classe?

spécifiquement je veux surcharger Boolean.Parse pour autoriser un argument int.

En bref, non, vous ne pouvez pas.

Réponse longue, les méthodes d’extension ne sont que du sucre syntaxique. C’EST À DIRE:

Si vous avez une méthode d’extension sur une chaîne, disons:

 public static ssortingng SomeSsortingngExtension(this ssortingng s) { //whatever.. } 

Quand vous l’appelez alors:

 mySsortingng.SomeSsortingngExtension(); 

Le compilateur le transforme en:

 ExtensionClass.SomeSsortingngExtension(mySsortingng); 

Donc, comme vous pouvez le voir, il n’y a aucun moyen de le faire pour les méthodes statiques.

Et une autre chose me vient à l’esprit: quel serait vraiment l’ intérêt de pouvoir append des méthodes statiques aux classes existantes? Vous pouvez simplement avoir votre propre classe d’assistance qui fait la même chose, alors quel est l’avantage de pouvoir faire:

 Bool.Parse(..) 

contre.

 Helper.ParseBool(..); 

N’apporte pas vraiment grand chose à la table …

spécifiquement je veux surcharger Boolean.Parse pour autoriser un argument int.

Une extension pour int fonctionnerait-elle?

 public static bool ToBoolean(this int source){ //do it //return it } 

Alors vous pouvez l’appeler comme ceci:

 int x = 1; bool y=x.ToBoolean(); 

Ça ne ressemble pas à vous. Voir ici pour une discussion à ce sujet

J’aimerais beaucoup avoir tort, cependant.

Vous pouvez append une méthode d’extension à int

 public static class IntExtensions { public static bool Parse(this int value) { if (value == 0) { return true; } else { return false; } } public static bool? Parse2(this int value) { if (value == 0) { return true; } if (value == 1) { return false; } return null; } } 

utilisé comme ça

  bool bool1 = 0.Parse(); bool bool2 = 1.Parse(); bool? bool3 = 0.Parse2(); bool? bool4 = 1.Parse2(); bool? bool5 = 3.Parse2(); 

Non, mais vous pourriez avoir quelque chose comme:

 bool b; b = b.YourExtensionMethod();