これは拡張メソッドのシグネチャです。それらは .NET3.5(C#3) で導入されました。コンパイラがないthis
と、静的メソッド シグネチャとして取得されます。次のコードで:
public class Foo
{
public void FooBar()
{
}
}
public static class FooEx
{
public static void Bar(this Foo f)
{
f.FooBar();
}
public static void StaticBar(Foo f)
{
f.FooBar();
}
}
次のように静的メソッドを呼び出すことができます。
FooEx.StaticBar(new Foo());
そして、次のような拡張メソッド:
new Foo().Bar();
静的メソッドとしての拡張メソッド:
FooBar.Bar(new Foo());
したがって、拡張メソッドを静的メソッドに変換するにはthis
、署名からキーワードを削除するだけです。ただし、静的メソッドを拡張メソッドに変換する場合は、次のことを行う必要があります。
this
署名にキーワードを追加する
public static
メソッドをネストされていないクラスに入れる
- メソッドのアクセス修飾子を作る
public
Scott Hanselman は、構文の選択と、コンパイラへの最小限の変更で既存の CLR にどのように適合するかについて、優れた記事を書いています。
要約すると、彼は、コンパイル後、生成された静的メソッドの IL コードと拡張メソッドのコードに違いはないと結論付けています。キーワードは、this
拡張メソッドの周りにいくつかのメタデータを配置するようにコンパイラに指示するためにあります。
私の推測では、this
1. すでに存在し、2. 他の既存のキーワードと比較して、拡張メソッドのコンテキストにその既存の意味が最も適しているため、彼らはそのキーワードを採用したと考えられます。