パラメータ | 詳細 |
---|---|
この | 拡張メソッドの最初のパラメータの前には必ずthis キーワードが続き、拡張するオブジェクトの「現在の」インスタンスを参照する識別子が続きます |
拡張メソッドは、オブジェクトインスタンス上でスタティックメソッドを型自体のメンバのように呼び出すことを可能にするシンタックスシュガーです。
拡張メソッドには、明示的なターゲットオブジェクトが必要です。拡張キーワードそのものからメソッドにアクセスするには、 this
キーワードを使用する必要があります。
拡張メソッドは静的宣言され、静的クラスに存在しなければなりません。
どの名前空間ですか?
拡張メソッドクラスのネームスペースの選択は、可視性と発見性のトレードオフです。
最も一般的に言及されているオプションは、拡張メソッドのカスタム名前空間を持つことです。しかし、これには、コードのユーザーが拡張メソッドが存在すること、およびそれらを見つける場所を知るように、コミュニケーションが必要です。
別の方法として、開発者がIntellisenseを使用して拡張メソッドを検出できるように名前空間を選択する方法があります。したがって、 Foo
クラスを拡張したい場合は、拡張メソッドをFoo
と同じ名前空間に配置するのが理にかなっています。
"誰か他人"の名前空間を使用することを妨げるものは何もないことを認識することが重要です 。したがって、 IEnumerable
を拡張する場合は、 System.Linq
名前空間に拡張メソッドを追加できます。
これは必ずしも良い考えではありません。たとえば、ある特定のケースでは、一般的な型( bool IsApproxEqualTo(this double value, double other)
を拡張することができますが、 System
全体を '汚染する'ことはできません。この場合、ローカルの特定の名前空間を選択することが望ましいです。
最後に、拡張メソッドを名前空間に全く入れないことも可能です!
良い参照の質問: 拡張メソッドの名前空間をどうやって管理していますか?
適用範囲
拡張メソッドを作成して、可能なすべての入力に適していることを確認し、特定の状況に関連するだけでなく、拡張メソッドを作成するときは注意が必要です。たとえば、 string
などのシステムクラスを拡張して、新しいコードを任意の文字列で使用できるようにすることができます。コードがドメイン固有の文字列形式でドメイン固有のロジックを実行する必要がある場合、その存在がシステム内の他の文字列を扱う呼び出し元を混乱させるため、拡張メソッドは適切ではありません。
次のリストに、拡張メソッドの基本的な機能とプロパティを示します
.
タイプインスタンスの後、それはVS intellisenseで来る。