拡張メソッドを含む VB.NET で書かれたライブラリがあります。VB.NET には、私の意見では、拡張メソッドの概念とは相容れない 2 つの特徴があります。
- 拡張メソッドはモジュールで宣言する必要があります ( Extension Methods )
- すべてのモジュール メンバーは名前空間スコープにあります ( Type Promotion )
これは、拡張メソッドが常に名前空間レベルでアクセスできるか、まったくアクセスできないことを意味します。これは意味がありません。スコープは、概念的には名前空間ではなく、拡張する型であるためです。
メソッドが拡張として宣言されているという事実は、その命名に影響を与えます。なぜなら、グローバル ユーティリティ メソッドには のような型が含まれる可能性がありますがGetDictionaryValueOrNull
、拡張メソッドは、それが型GetValueOrNull
に対して宣言されていることがすでに明確である必要があるためDictionary
です。拡張メソッドがグローバルな場合、これは混乱を招く可能性があります: メソッドを持つ (辞書ではない) クラスにいるとしGetValue
ます。「GetValue」と入力すると、Visual Studio は「GetValue」と「GetValueOrNull」の両方を一覧表示し、現在のクラスが両方の操作をサポートしているかのように表示します。
これに対する解決策はありますか(「C#で書く」以外)? モジュールを非グローバルとしてマークすることはできますか、または少なくとも Visual Studioが実際に拡張メソッドとして検索されている場合にのみ拡張メソッドを表示するように強制することはできますか?
Visual Studio User Voice での提案: http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/4228049-include-an-option-to-disable-the-promotion-of-scop