- PR -

VB.NET2003 関数の呼び出し先の取得

1
投稿者投稿内容
yamayama
ベテラン
会議室デビュー日: 2006/02/10
投稿数: 68
投稿日時: 2006-03-06 16:24
VB.NET初心者なのですが、VB.NETで関数の呼び出し先の取得方法について分からない事があるのですが、

 関数が呼び出された(使用された)フォーム・もしくはクラスを関数側で取得することはできないでしょうか。

どなたか、取得方法を伝授いただけないでしょうか?
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-03-06 16:47
少し日本語の食い違いで勘違いしているかもしれませんが。

「関数を呼び出した(使用した)フォーム・もしくはクラスを関数側で取得することはできないでしょうか。 」と解釈します。
引数でオブジェクトを渡すのはいけないのでしょうか?
_________________
囚人のジレンマな日々
yamayama
ベテラン
会議室デビュー日: 2006/02/10
投稿数: 68
投稿日時: 2006-03-06 16:58
早速のお返事ありがとうございます。

引数でオブジェクトを渡す方法以外を探しております。

New StackFrame(1).GetMethod.DeclaringType.Name
を使用した場合、呼び出しもとの関数を取得することができる事は
わかったのですが、
できれば
クラス又は、フォームを取得したいと考えてます。

よろしくお願いします。
うにくま
ベテラン
会議室デビュー日: 2005/11/05
投稿数: 82
投稿日時: 2006-03-06 17:54
StackFrame(1).GetMethod().DeclaringType.FullName
はどうでしょう?

あと、メソッド名なら
StackFrame(1).GetMethod.Name
でも取得できます。
yamayama
ベテラン
会議室デビュー日: 2006/02/10
投稿数: 68
投稿日時: 2006-03-06 18:47
ありがとうございました。
New StackFrame(1).GetMethod.DeclaringType.Name
を使用することで、解決する事ができました。
又、機会がありましたらよろしくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-06 19:20
引用:

yamayamaさんの書き込み (2006-03-06 16:58) より:

New StackFrame(1).GetMethod.DeclaringType.Name
を使用した場合、呼び出しもとの関数を取得することができる事はわかったのですが、


関数は取得できないでしょう。
呼び出し元の System.Type の名前です。
関数というか、メソッドは関係ないように思えます。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-06 19:26
引用:

なちゃさんの書き込み (2006-03-06 22:59) より:

こ、これは無理というか違う動作なんじゃないかと…


すいません、今見ると何を失念していたのすらわからないほどに大ボケかましてますね。
月に 1 度くらい、こういう天然ボケをかましてるように思えます... orz

[ シグネチャを削除 ]

[ メッセージ編集済み 編集者: じゃんぬねっと 編集日時 2006-10-12 11:48 ]
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2006-03-06 22:59
引用:

じゃんぬねっとさんの書き込み (2006-03-06 19:26) より:
もし呼び出し元のクラス名 (型) を取得するならば私ならこうします。

コード:
    Dim hMethodInfo As System.Reflection.MethodBase = System.Reflection.MethodBase.GetCurrentMethod()

    MessageBox.Show(hMethodInfo.DeclaringType.FullName)




こ、これは無理というか違う動作なんじゃないかと…

ちなみにStackFrameなんかを使う場合、呼び出し元(論理的に一回呼び出し分だけ前のメソッド)という保証はないので、
メソッドに属性なんか付ける必要があるかもしれません(どの属性だったか忘れましたが)。
※まあ属性付けても、そのさらに前がインライン展開されていない保証もないと思うので、
 絶対かというと微妙なのかもしれませんが(クラスの取得レベルなら動作的に問題ない?)。
1

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