Maison >développement back-end >Tutoriel C#.Net >Exemple d'analyse des méthodes d'extension en C#

Exemple d'analyse des méthodes d'extension en C#

黄舟
黄舟original
2017-06-18 10:24:171263parcourir

Cet article présente principalement les méthodes d'extension C# et analyse les fonctions, les méthodes d'utilisation et les précautions associées des méthodes d'extension C# sous forme d'exemples. Les amis dans le besoin peuvent s'y référer

ceci. article L'exemple décrit les méthodes d'extension C#. Partagez-le avec tout le monde pour votre référence, comme suit :

Méthodes d'extension

Les méthodes d'extension vous permettent d'"ajouter" des méthodes aux types existants, Sans créer un nouveau type dérivé, recompiler ou modifier autrement le type d'origine. Une méthode d'extension est un type particulier de méthode statique, mais peut être appelée comme une méthode d'instance sur un type d'extension. Pour le code client écrit en C# et Visual Basic, il n'y a pas de différence significative entre l'appel d'une méthode d'extension et l'appel de la méthode réellement définie dans le type.

Si nous avons une telle exigence, convertissez le premier caractère d'une chaîne en majuscule, le deuxième caractère en nième caractère en minuscule, et les autres restent inchangés. Alors, comment y parvenir. ce?

Sans méthodes d'extension :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ExtraMethod
{
  //抽象出静态StringHelper类
  public static class StringHelper
  {
    //抽象出来的将字符串第一个字符大写,从第一个到第len个小写,其他的不变的方法
    public static string ToPascal(string s,int len)
    {
      return s.Substring(0, 1).ToUpper() + s.Substring(1, len).ToLower() + s.Substring(len + 1);
    }
  }
  class Program
  {
    static void Main(string[] args)
    {
      string s1 = "aSDdAdfGDFSf";
      string s2 = "sbfSDffsjG";
      Console.WriteLine(StringHelper.ToPascal(s1,3));
      Console.WriteLine(StringHelper.ToPascal(s2, 5));
    }
  }
}

Avec méthodes d'extension :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ExtraMethod
{
  class Program
  {
    static void Main(string[] args)
    {
      string s1 = "aSDdAdfGDFSf";
      string s2 = "sbfSDffsjG";
      Console.WriteLine(s1.ToPascal(3));
      Console.WriteLine(s2.ToPascal(5));
    }
  }
  //扩展类,只要是静态就可以
  public static class ExtraClass
  {
    //扩展方法--特殊的静态方法--为string类型添加特殊的方法ToPascal
    public static string ToPascal(this string s, int len)
    {
      return s.Substring(0, 1).ToUpper() + s.Substring(1, len).ToLower() + s.Substring(len + 1);
    }
  }
}

Comparaison des deux méthodes ci-dessus :

1. Lorsque le code accède à une méthode statique comme ToPascal Plus pratique . Cela agit comme si le type étendu avait réellement la méthode d'instance.
2. La méthode d'extension ne change pas le code de la classe étendue, et il n'est pas nécessaire de recompiler, modifier ou dériver la classe étendue

Définir la méthode d'extension

Définir la méthode d'extension


1. Définissez une classe statique pour contenir les méthodes d'extension.

2. Cette classe doit être visible par le code client. 3. Implémentez la méthode d'extension en tant que méthode statique et donnez-lui au moins la même visibilité que la classe conteneur. 4. Le premier paramètre de la méthode précise le type opéré par la méthode ; le paramètre doit commencer par le modificateur this. Notez que le premier argument n'est pas spécifié par le code appelant, car il représente le type de l'

opérateur

appliqué et le compilateur connaît déjà le type de l'objet . Il vous suffit de fournir les paramètres réels pour ces deux paramètres formels via n.

Notes :

1. Les méthodes d'extension doivent être définies dans une classe statique 2. La priorité des méthodes d'extension
Inférieur à une méthode de classe portant le même nom

3. Les méthodes d'extension ne sont valides que dans un espace de noms spécifique 4. N'abusez pas des méthodes d'extension sauf si nécessaire

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn