C#での静的メソッドの仮パラメータで「この」キーワードの使用
-
21-08-2019 - |
質問
私は次のようにC#コードの複数のインスタンスに遭遇しました
public static int Foo(this MyClass arg)
私はthis
キーワードは、この場合には何を意味するのかの説明を見つけることができませんでした。任意の洞察力?
解決
これはを拡張メソッドのです。 説明についてはこちらを参照してください。 のます。
拡張メソッドは、開発者が公衆に新しいメソッドを追加することができます サブクラスすることなく、既存のCLR型の契約、それか 元の型を再コンパイルします。拡張メソッドは、ブレンドを助けます 「ダックタイピング」の柔軟性は、動的言語の中に大衆の支持します 今日のパフォーマンスとコンパイル時の検証と 言語を強く型付けされます。
拡張メソッドは、便利な、さまざまなシナリオを有効にし、作るのを助けます 可能性は本当に強力なLINQクエリフレームワーク...。
それはあなたが呼び出すことができることを意味します。
MyClass myClass = new MyClass();
int i = myClass.Foo();
ではなく
MyClass myClass = new MyClass();
int i = Foo(myClass);
以下に述べるようにます。 他のヒント
スコット区の引用されたブログの記事うまくそれを説明します。
私にとっては、質問への答えは、そのポストでは、次の文である。
静的方法は、上記持っているかに注意してください 最初の前に「この」キーワード 文字列型のパラメータ引数。 これは、このコンパイラに指示します 特定の拡張メソッドはする必要があります 型「string」のオブジェクトに追加。 )(IsValidEmailAddress以内 私は、できるメソッドの実装 公共のすべてにアクセス のプロパティ/メソッド/イベント 実際の文字列のインスタンスその方法 上と呼ばれ、リターンされています それがあるかどうかに応じて、真/偽 有効なメールかどうか。
:の
インテリセンスは、青色の矢印を持つ拡張メソッドを表示(例えば「集合<>」の前)
あなたが必要とする
using the.namespace.of.the.static.class.with.the.extension.methods;
表示されるように、彼らはそれらを使用してコードとは異なる名前空間にある場合は、利用できるように拡張メソッドのために。
私はちょうど自分自身にこれに他の日のことを学びました:このキーワードは、メソッドがそれを進めるクラスの拡張されたことを定義します。だからあなたたとえば、MyClassのは、fooという新しい拡張メソッドがあります。(任意のパラメータを受け入れ、intを返していません。それは他の公共の方法と同様に使用することができます)。
「これは」パラメータリスト内の次のクラスを拡張します。
は、以下のメソッドシグネチャ中のSO「この」は、「文字列」に延びています。ラインは、メソッドへの通常の引数として関数に渡されます。 パブリック静的文字列[] SplitCsvLine(この文字列ライン)
上記の例では、「この」クラスは、「文字列」クラスに内蔵延びている。