- 拡張メソッドを使用すると、再コンパイル、またはそれ以外の場合は元の型を変更し、新しい派生型を作成することなく、既存の型にメソッドを「追加」することができます。
- 拡張メソッドは、静的な方法の特別な種類であるが、拡張の同じタイプのインスタンスメソッドとして呼び出すことができます
- 拡張メソッドは、静的メソッドとして定義されているが、それらはインスタンスメソッドの構文によって呼び出されます。彼らの最初の引数は、メソッドに作用タイプ、およびこのプレフィックスのパラメータ修飾子を指定します。あなたが明示的にソースコードに導入されたネームスペーディレクティブを使用している場合にのみ後、この方法は、以下の範囲内で延長されました。
- ディレクティブを使用すると、明示的にVisual Studioがメソッドの拡張を定義するために配置することができるが、それでも間違ってコンパイルされ、ソースコードに導入された名前空間でなければなりません
- 優先順位
- 拡張メソッドは、クラスまたはインタフェースを拡張するために使用されてもよいが、拡張メソッドを書き換えることはできません。同じ名前とインタフェースやクラスメソッドのシグネチャを持つ拡張メソッドが呼び出されることはありません。
- コンパイル時、例示的な方法自体に定義されたタイプの優先度よりも常に低い拡張方法。タイプと呼ばれるプロセスを有する言い換えれば、(INT I)法、
- そして、あなたは、拡張メソッドは同じシグネチャ、常にインスタンスメソッドにバインドされたコンパイラを持っています。コンパイラは、メソッド呼び出しを検出すると、それは最初のインスタンスメソッドこの種のマッチング方法を探します。
- 一致するメソッドが見つからない場合、コンパイラは、定義された拡張メソッドのいずれかのタイプを検索し、最初に見つかった拡張メソッドにバインドします。
namespace ExtensionMethods
{
public static class MyExtensions
{
public static int WordCount(this String str)
{
return str.Split(new char[] { ' ', '.', '?' },
StringSplitOptions.RemoveEmptyEntries).Length;
}
}
}
using ExtensionMethods;
string s = "Hello Extension Methods";
int i = s.WordCount();