ホームページ >バックエンド開発 >C#.Net チュートリアル >C# の拡張メソッドの分析例
この記事では主に C# 拡張メソッドを紹介し、C# 拡張メソッドの機能、使用法、および関連する 注意点 を例の形式で分析します。参照用に次のように共有します。
拡張メソッド拡張メソッドを使用すると、新しい派生型の作成、再コンパイル、または元の型の変更を行わなくても、既存の型にメソッドを「追加」できます。拡張メソッドは特殊な種類の静的メソッドですが、拡張タイプのインスタンス メソッドと同様に呼び出すことができます。 C# および Visual Basic で記述されたクライアント コードの場合、拡張メソッドの呼び出しと、その型で実際に定義されているメソッドの呼び出しとの間に大きな違いはありません。
このような要件がある場合、
文字列の最初の文字を大文字に変換し、2番目の文字からn番目の文字までを小文字に変換し、その他の文字は変更しないでください。では、どうすればそれを達成できるでしょうか?
拡張メソッドを使用しない場合: 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));
}
}
}
拡張メソッドを使用する場合:
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); } } }
上記 2 つのメソッドの比較: 1. ToPascal のような静的メソッドにアクセスしていますのほうが便利です。拡張型が実際にインスタンス メソッドを持っているかのように動作します。
2. 拡張メソッドは拡張クラスのコードを変更せず、拡張クラスを再コンパイル、変更、派生する必要はありません拡張メソッドを定義します 1. 静的クラスを定義します拡張メソッドが含まれています。
2. このクラスはクライアント コードから見える必要があります。 3. 拡張メソッドを静的メソッドとして実装し、それを含むクラスと少なくとも同じ可視性を与えます。
4. メソッドの最初のパラメータは、メソッドによって操作されるタイプを指定します。パラメータは this 修飾子で始まる必要があります。
最初のパラメータは、
が適用される型を表し、コンパイラはすでにオブジェクトの型を知っているため、呼び出し元のコードでは指定されないことに注意してください。 これら 2 つの仮パラメータには、n を介して実際の引数を指定するだけで済みます。
注: 1. 拡張メソッドは静的クラスで定義する必要があります
2. 拡張メソッドの優先度は、同じ名前のクラスメソッドよりも低くなります
3. 拡張メソッドは特定の 名前空間内 内で有効
4. 必要な場合を除き、拡張メソッドを乱用しないでください
以上がC# の拡張メソッドの分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。