Comment étendre les types intégrés C #, comme Ssortingng?

Salutations à tous … J’ai besoin de Trim une Ssortingng . Mais je veux supprimer tous les espaces vides répétés dans la chaîne elle-même, non seulement à la fin ou au début. Je pourrais le faire avec une méthode comme:

 public static ssortingng ConvertWhitespacesToSingleSpaces(ssortingng value) { value = Regex.Replace(value, @"\s+", " "); } 

Ce que j’ai eu d’ ici . Mais je veux que ce morceau de code soit appelé dans le Ssortingng.Trim() lui-même, donc je pense que je dois étendre ou surcharger ou remplacer la méthode Trim … Y a-t-il un moyen de le faire?

Merci d’avance.

Puisque vous ne pouvez pas étendre ssortingng.Trim (). Vous pouvez créer une méthode d’extension comme décrit ici qui coupe et réduit les espaces.

 namespace CustomExtensions { //Extension methods must be defined in a static class public static class SsortingngExtension { // This is the extension method. // The first parameter takes the "this" modifier // and specifies the type for which the method is defined. public static ssortingng TrimAndReduce(this ssortingng str) { return ConvertWhitespacesToSingleSpaces(str).Trim(); } public static ssortingng ConvertWhitespacesToSingleSpaces(this ssortingng value) { return Regex.Replace(value, @"\s+", " "); } } } 

Vous pouvez l’utiliser comme ça

 using CustomExtensions; ssortingng text = " I'm wearing the cheese. It isn't wearing me! "; text = text.TrimAndReduce(); 

Vous donne

 text = "I'm wearing the cheese. It isn't wearing me!"; 

C’est possible? Oui, mais seulement avec une méthode d’extension

La classe System.Ssortingng est scellée, vous ne pouvez donc pas utiliser la substitution ou l’inheritance.

 public static class MySsortingngExtensions { public static ssortingng ConvertWhitespacesToSingleSpaces(this ssortingng value) { return Regex.Replace(value, @"\s+", " "); } } // usage: ssortingng s = "test !"; s = s.ConvertWhitespacesToSingleSpaces(); 

Il y a un oui et un non à votre question.

Oui, vous pouvez étendre les types existants en utilisant des méthodes d’extension. Les méthodes d’extension, naturellement, ne peuvent accéder qu’à l’interface publique du type.

 public static ssortingng ConvertWhitespacesToSingleSpaces(this ssortingng value) {...} // some time later... "hello world".ConvertWhitespacesToSingleSpaces() 

Non, vous ne pouvez pas appeler cette méthode Trim (). Les méthodes d’extension ne participent pas à la surcharge. Je pense qu’un compilateur devrait même vous donner un message d’erreur détaillant cela.

Les méthodes d’extension ne sont visibles que si l’espace de nom contenant le type qui définit la méthode est utilisé.

Méthodes d’extension

 public static class MyExtensions { public static ssortingng ConvertWhitespacesToSingleSpaces(this ssortingng value) { return Regex.Replace(value, @"\s+", " "); } } 

Outre l’utilisation de méthodes d’extension – probablement un bon candidat ici -, il est également possible de “emballer” un object (par exemple “composition d’object”). Tant que la forme encapsulée ne contient pas plus d’informations que la chose en cours de regroupement, l’élément encapsulé peut être proprement transmis par le biais de conversions implicites ou explicites sans perte d’information: simplement un changement de type / interface.

Heureux codage