Comment puis-je créer des méthodes prototypes (comme JavaScript) en C#.Net ?

StackOverflow https://stackoverflow.com/questions/4610

  •  08-06-2019
  •  | 
  •  

Question

Comment est-il possible de créer des méthodes prototypes en C#.Net ?

En JavaScript, je peux faire ce qui suit pour créer une méthode trim pour l'objet chaîne :

String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g,"");
}

Comment puis-je procéder en C#.Net ?

Était-ce utile?

La solution

Vous ne pouvez pas ajouter dynamiquement des méthodes à des objets ou des classes existantes dans .NET, sauf en modifiant la source de cette classe.

Vous pouvez cependant, en C# 3.0, utiliser des méthodes d'extension, qui regarder comme les nouvelles méthodes, mais sont magiques au moment de la compilation.

Pour faire cela pour votre code :

public static class StringExtensions
{
    public static String trim(this String s)
    {
        return s.Trim();
    }
}

Pour l'utiliser:

String s = "  Test  ";
s = s.trim();

Cela ressemble à une nouvelle méthode, mais elle sera compilée exactement de la même manière que ce code :

String s = "  Test  ";
s = StringExtensions.trim(s);

Qu’essayez-vous d’accomplir exactement ?Peut-être existe-t-il de meilleures façons de faire ce que vous voulez ?

Autres conseils

On dirait que vous parlez des méthodes d'extension de C#.Vous ajoutez des fonctionnalités aux classes existantes en insérant le mot-clé « this » avant le premier paramètre.La méthode doit être une méthode statique dans une classe statique.Les chaînes dans .NET ont déjà une méthode "Trim", je vais donc utiliser un autre exemple.

public static class MyStringEtensions
{
    public static bool ContainsMabster(this string s)
    {
        return s.Contains("Mabster");
    }
}

Alors maintenant, chaque chaîne a une méthode ContainsMabster extrêmement utile, que je peux utiliser comme ceci :

if ("Why hello there, Mabster!".ContainsMabster()) { /* ... */ }

Notez que vous pouvez également ajouter des méthodes d'extension aux interfaces (par exemple IList), ce qui signifie que toute classe implémentant cette interface reprendra également cette nouvelle méthode.

Tous les paramètres supplémentaires que vous déclarez dans la méthode d'extension (après le premier paramètre "this") sont traités comme des paramètres normaux.

Vous devez créer une méthode d'extension qui nécessite .NET 3.5.La méthode doit être statique, dans une classe statique.Le premier paramètre de la méthode doit être préfixé par « this » dans la signature.

public static string MyMethod(this string input)
{
    // do things
}

Vous pouvez alors l'appeler comme

"asdfas".MyMethod();

En utilisant le compilateur 3.5, vous pouvez utiliser une méthode d'extension :

public static void Trim(this string s)
{
  // implementation
}

Vous pouvez l'utiliser sur un projet ciblé CLR 2.0 (compilateur 3.5) en incluant ce hack :

namespace System.Runtime.CompilerServices
{
  [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Assembly)]
  public sealed class ExtensionAttribute : Attribute
  {
  }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top