- - PR -
Overloadsされたもののインテリセンス表示順序について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-12-28 23:39
VS2005(Vb.net)によるクラスライブラリ作成を行っています。
ライブラリを作成しているとOverloadsを行う場面は多々あるかと思いますが、 これらOverloadsされたメソッドやプロパティを実際に利用する際に 表示されるインテリセンスの表示について質問です。
例えば上記のメソッドを用意した場合、これらを利用する際に「最も最初に」 インテリセンスによって表示される候補は、どのような基準によって 選ばれているのでしょうか? またこの表示順序を制御するような手段はあるのでしょうか? [ メッセージ編集済み 編集者: Ahf 編集日時 2006-12-28 23:40 ] | ||||||||
|
投稿日時: 2006-12-29 01:04
おそらくですが、メタ データが登録されている順番になるのではないでしょうか。 ソース コード上で言いますと、通常は '上から順番' になるでしょう。
ビルド時に、シグネチャを並び替えるようなアドインを考えれば良いのでしょうけど、 ライブラリを作るのであれば、ソース上でも意味のある順番で上から並べないでしょうか? # あいまいな記憶で書いていますので、間違いがありましたらごめんなさい。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-12-29 10:13
じゃんぬさんレスありがとうございます。
今回の疑問は、複数のDLLを利用した場合のインテリセンス表示順が制御できたらなぁ、というのが発端でした。 # A.Dllのメソッド定義→B.Dllのメソッド定義の順序で表示される A.Dllにて定義したクラスを、B.Dllにて継承しOverloadsを行う。 そういった場合、気持ちとしてはB.Dllにて用意したやつを最初に表示できればなぁ と思ったのですが、そう簡単にはいかないぞというところのようですね。 A.Dllのクラスだけでみれば、じゃんぬさんの言われているように「意味のある順序」 にて記述しているので問題はないんですよね。 アドインについてはこれから調べてみることにします。 ありがとうございました。 | ||||||||
|
投稿日時: 2006-12-29 11:57
複数のアセンブリを参照した場合のお話でしたか... (書いておいて頂かないと、わかんないっス... orz)
この場合ですと、複数のアセンブリどうこうはあまり関係なくて、継承階層の順番になるでしょう。 IDE のアセンブリのロード方法に依存してしまうかもしれません。 ちなみに、Visual Studio の場合、B.Dll で実装したメソッドが先に表示されると思いますよ。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-12-29 12:51
情報の提供不足で申し訳ないです。>じゃんぬさん
ただ単品なアセンブリの際についても同じように疑問をもっていましたので、 じゃんぬさんのレスは大変参考になりました。
あれ?私の環境ではA.Dllのメソッドが先に表示されています・・・。 ミニマムなソリューションで試したところ、次のような感じで挙動が変わりました。
上記のように実装した場合、Dim testObj As New SampleBとすると、 testObj.Testと記述した際に表示される候補はSampleBクラスのTestメソッドでした。 ところがSampleBクラスの名称をBSampleと変更すると、表示される候補はSampleクラス のTestメソッドが表示されるようになりました。 どうやらクラス名もインテリセンスの表示順に関わっている様子です。 このあたりはどこか資料などがあるのでしょうか・・・? | ||||||||
|
投稿日時: 2006-12-29 14:13
うーん、それだけはないと思っていたのですが... 推測ばかりで意見を言っても、意味がないので試してみました。 Visual Studio 2005 Team Suite にて、VB のクラス ライブラリを 2 つ作成し、 同様に試みてみましたが、名前を変更しただけでは、特に順番に変化はありませんでした。 ただし、A.Dll の方が候補としては先に表示されているようです。 どうも、Visual Studio 2003 と Visual Studio 2005 とでは、挙動が違うようです。 やはり、IDE によって依存しているということになります。 そうなると、アセンブリをいかように作成しようと制御することは不可能という結論に... [追記] あ、できあがるアセンブリが 1.1 と 2.0 では違うのだから、IDE 依存とは限らないですね。 [/追記] _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-12-29 22:44
度々ありがとうございます。
試した自分が言うのも何ですが、クラス名が関わるという推測は確かに怪しいんですよね。 ちなみに私の環境はVs2005Proでした。まさかエディションで異なる動作・・・ いやいや、考えにくいですね。 2.0FrameWorkの仕様なのかVs2005の仕様かは判断つけかねますが、 とりあえず純粋なコーディングレベルではどうすることもできない領域の様子ですね。 色々とありがとうございました。 |
1