「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
クラスライブラリ、フレームワーク開発に使用されつつあるので少々調査。
詳細 †
- 新規の派生型の作成、再コンパイル、または元の型の変更を行うことなく既存の型にメソッドを "追加" できる。
- 拡張メソッドは特別な種類の静的メソッドですが、拡張された型のインスタンス メソッドのように呼び出せる。
定義と利用 †
データ列に対するパイプラインやメソッドチェーンを、
後付けで実装するようなユースケースに最も適合する。
定義側 †
- staticクラスのstaticメソッドの第1引数の前に this を付ける。
- 同じ名前空間内に2つ以上同名の拡張メソッドを定義できない。
利用側 †
- インスタンス・メソッドと同じ書き方をする(第1引数にthis的にアクセス可能)。
- 同名の拡張メソッドが定義されている名前空間を同時に using できない。
注意 †
便利なだけに、フツーに考えた範囲で問題ありそう。
usingしないとIDE上に見えてこない。 †
名前空間をusing(Imports)しないと拡張メソッドがIDE上に見えてこない。
衝突が起きると、対応策が少々アレ。 †
https://twitter.com/openhishopjpo/status/1086149348109373440
- 再定義または削除により、曖昧さを取り除く。
- 一方の名前空間だけusing(Imports)で取り込む。
- 両方の名前空間が必要な場合は、完全修飾クラス名によって単純に静的クラス呼び出しする。
同じ名前空間内に将とするメソッドが定義されていると、当然、拡張メソッドとして使ものにならなくなる。
その他 †
構造体、インターフェイス、enumに対しても適用可能。
参考 †
Tags: :プログラミング, :.NET開発