- PR -

Overloadsされたもののインテリセンス表示順序について

1
投稿者投稿内容
Ahf
大ベテラン
会議室デビュー日: 2006/08/16
投稿数: 172
投稿日時: 2006-12-28 23:39
VS2005(Vb.net)によるクラスライブラリ作成を行っています。
ライブラリを作成しているとOverloadsを行う場面は多々あるかと思いますが、
これらOverloadsされたメソッドやプロパティを実際に利用する際に
表示されるインテリセンスの表示について質問です。

コード:

Public Overloads Sub Test(ByVal strValue As String)
Public Overloads Sub Test(ByVal intValue As Integer)
Public Overloads Sub Test(ByVal dblValue As Double)


例えば上記のメソッドを用意した場合、これらを利用する際に「最も最初に」
インテリセンスによって表示される候補は、どのような基準によって
選ばれているのでしょうか?
またこの表示順序を制御するような手段はあるのでしょうか?

[ メッセージ編集済み 編集者: Ahf 編集日時 2006-12-28 23:40 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-12-29 01:04
引用:

Ahfさんの書き込み (2006-12-28 23:39) より:

例えば上記のメソッドを用意した場合、これらを利用する際に「最も最初に」
インテリセンスによって表示される候補は、どのような基準によって選ばれているのでしょうか?


おそらくですが、メタ データが登録されている順番になるのではないでしょうか。
ソース コード上で言いますと、通常は '上から順番' になるでしょう。

引用:

またこの表示順序を制御するような手段はあるのでしょうか?


ビルド時に、シグネチャを並び替えるようなアドインを考えれば良いのでしょうけど、
ライブラリを作るのであれば、ソース上でも意味のある順番で上から並べないでしょうか?

# あいまいな記憶で書いていますので、間違いがありましたらごめんなさい。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Ahf
大ベテラン
会議室デビュー日: 2006/08/16
投稿数: 172
投稿日時: 2006-12-29 10:13
じゃんぬさんレスありがとうございます。

今回の疑問は、複数のDLLを利用した場合のインテリセンス表示順が制御できたらなぁ、というのが発端でした。

# A.Dllのメソッド定義→B.Dllのメソッド定義の順序で表示される

A.Dllにて定義したクラスを、B.Dllにて継承しOverloadsを行う。
そういった場合、気持ちとしてはB.Dllにて用意したやつを最初に表示できればなぁ
と思ったのですが、そう簡単にはいかないぞというところのようですね。
A.Dllのクラスだけでみれば、じゃんぬさんの言われているように「意味のある順序」
にて記述しているので問題はないんですよね。

アドインについてはこれから調べてみることにします。
ありがとうございました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-12-29 11:57
引用:

Ahfさんの書き込み (2006-12-29 10:13) より:

今回の疑問は、複数のDLLを利用した場合のインテリセンス表示順が制御できたらなぁ、というのが発端でした。

# A.Dllのメソッド定義→B.Dllのメソッド定義の順序で表示される


複数のアセンブリを参照した場合のお話でしたか...
(書いておいて頂かないと、わかんないっス... orz)

引用:

A.Dllにて定義したクラスを、B.Dllにて継承しOverloadsを行う。
そういった場合、気持ちとしてはB.Dllにて用意したやつを最初に表示できればなぁ
と思ったのですが、そう簡単にはいかないぞというところのようですね。


この場合ですと、複数のアセンブリどうこうはあまり関係なくて、継承階層の順番になるでしょう。
IDE のアセンブリのロード方法に依存してしまうかもしれません。

ちなみに、Visual Studio の場合、B.Dll で実装したメソッドが先に表示されると思いますよ。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Ahf
大ベテラン
会議室デビュー日: 2006/08/16
投稿数: 172
投稿日時: 2006-12-29 12:51
情報の提供不足で申し訳ないです。>じゃんぬさん

ただ単品なアセンブリの際についても同じように疑問をもっていましたので、
じゃんぬさんのレスは大変参考になりました。

引用:
じゃんぬねっとさんの書き込み(2006-12-29 11:57)より:
ちなみに、Visual Studio の場合、B.Dll で実装したメソッドが先に表示されると思いますよ。


あれ?私の環境ではA.Dllのメソッドが先に表示されています・・・。
ミニマムなソリューションで試したところ、次のような感じで挙動が変わりました。

コード:
'A.Dllにて実装
Public Class Sample
    Public Sub Test(ByVal strValue As String)
    End Sub
End Class
'B.Dllにて実装
Public Class SampleB
    Inherits A.Sample
    Public Overloads Sub Test(ByVal intValue As Integer)
    End Sub
End Class


上記のように実装した場合、Dim testObj As New SampleBとすると、
testObj.Testと記述した際に表示される候補はSampleBクラスのTestメソッドでした。
ところがSampleBクラスの名称をBSampleと変更すると、表示される候補はSampleクラス
のTestメソッドが表示されるようになりました。

どうやらクラス名もインテリセンスの表示順に関わっている様子です。
このあたりはどこか資料などがあるのでしょうか・・・?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-12-29 14:13
引用:

Ahfさんの書き込み (2006-12-29 12:51) より:

どうやらクラス名もインテリセンスの表示順に関わっている様子です。


うーん、それだけはないと思っていたのですが...
推測ばかりで意見を言っても、意味がないので試してみました。

Visual Studio 2005 Team Suite にて、VB のクラス ライブラリを 2 つ作成し、
同様に試みてみましたが、名前を変更しただけでは、特に順番に変化はありませんでした。

ただし、A.Dll の方が候補としては先に表示されているようです。
どうも、Visual Studio 2003 と Visual Studio 2005 とでは、挙動が違うようです。

やはり、IDE によって依存しているということになります。
そうなると、アセンブリをいかように作成しようと制御することは不可能という結論に...

[追記]
あ、できあがるアセンブリが 1.1 と 2.0 では違うのだから、IDE 依存とは限らないですね。
[/追記]

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Ahf
大ベテラン
会議室デビュー日: 2006/08/16
投稿数: 172
投稿日時: 2006-12-29 22:44
度々ありがとうございます。

試した自分が言うのも何ですが、クラス名が関わるという推測は確かに怪しいんですよね。
ちなみに私の環境はVs2005Proでした。まさかエディションで異なる動作・・・
いやいや、考えにくいですね。

2.0FrameWorkの仕様なのかVs2005の仕様かは判断つけかねますが、
とりあえず純粋なコーディングレベルではどうすることもできない領域の様子ですね。

色々とありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)