C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: Type.GetMethodsでPublicメソッドのみ取得


(過去ログ 19 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■8042 / inTopicNo.1)  Type.GetMethodsでPublicメソッドのみ取得
  
□投稿者/ 春紫苑 (5回)-(2007/09/21(Fri) 16:11:30)

分類:[C#] 

環境は C#, VS2005 です。

あるクラスのPublicメソッドだけを一覧表示するプログラムを作成しています。

hoge.GetType().GetMethods(BindingFlags.Instance | BindingFlags.Public);

上記のコードでPublicメソッドは取得できるのですが、
Publicプロパティが定義されている場合、
「get_プロパティ名」なるメソッドが出力されてしまいます。
このメソッドを除外する方法についてアドバイスを頂けませんか?

お願いします。
引用返信 編集キー/
■8059 / inTopicNo.2)  Re[1]: Type.GetMethodsでPublicメソッドのみ取得
□投稿者/ Jitta on the way (14回)-(2007/09/21(Fri) 18:27:52)
No8042 (春紫苑 さん) に返信
> 環境は C#, VS2005 です。
>
> あるクラスのPublicメソッドだけを一覧表示するプログラムを作成しています。
>
> hoge.GetType().GetMethods(BindingFlags.Instance | BindingFlags.Public);
>
> 上記のコードでPublicメソッドは取得できるのですが、
> Publicプロパティが定義されている場合、
> 「get_プロパティ名」なるメソッドが出力されてしまいます。
> このメソッドを除外する方法についてアドバイスを頂けませんか?
>
> お願いします。

set_プロパティ
もあるんじゃないかな?

プロパティを実現するために作られるアクセス メソッドですね。
名前付けのルールは単純なので、プロパティ一覧を拾って引くというのはどう?
引用返信 編集キー/
■8066 / inTopicNo.3)  Re[2]: Type.GetMethodsでPublicメソッドのみ取得
□投稿者/ なちゃ (61回)-(2007/09/21(Fri) 19:12:11)
スペシャルネームなメソッドは省くとか?
引用返信 編集キー/
■8069 / inTopicNo.4)  Re[3]: Type.GetMethodsでPublicメソッドのみ取得
□投稿者/ mあ (67回)-(2007/09/21(Fri) 20:54:08)
No8066 (なちゃ さん) に返信
> スペシャルネームなメソッドは省くとか?
BindingFlags#
●アクセシビリティで識別
DeclaredOnly
FlattenHierarchy
IgnoreCase
IgnoreReturn
Instance
NonPublic
Public
Static
●バインディング引数で識別
ExactBinding
OptionalParamBinding
●操作で識別
CreateInstance
GetField
SetField
GetProperty
SetProperty
InvokeMethod
PutDispProperty
PutRefDispProperty

dim mi() as MethodInfo
with(BindingFlags)
mi = Type.GetMethods(.Public Or .Instance Or .InvokeMethod)
end with

じゃぁないかと。

MSDNみまひょ。


引用返信 編集キー/
■8073 / inTopicNo.5)  Re[4]: Type.GetMethodsでPublicメソッドのみ取得
□投稿者/ Hongliang (193回)-(2007/09/21(Fri) 22:24:51)
Hongliang さんの Web サイト
2007/09/21(Fri) 22:25:18 編集(投稿者)

No8069 (mあ さん) に返信
> じゃぁないかと。
>
> MSDNみまひょ。

MSDN ならまず Type.GetMethods(BindingFlags) を見てください。使用できる BindingFlags が明記されていますから。


IsSpecialName なのを省くか、あとは GetProperties & GetEvents で get/set/add/remove の MethodInfo を取得して、GetMethods で取得したそれぞれが一致するかどうか確認するとか?
あ、演算子のオーバーロードはどうしようか……。
// C# コンパイラ的には IsSpecialName で十分らしいけど。
引用返信 編集キー/
■8080 / inTopicNo.6)  Re[5]: Type.GetMethodsでPublicメソッドのみ取得
□投稿者/ 春紫苑 (7回)-(2007/09/22(Sat) 00:10:38)
皆様、アドバイスをありがとうございます。

IsSpecialName なのを省くことで、期待した動作を実現することができました。
Reflection に関しては知らないことが多いなと思いました。
勉強不足ですね、私。

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

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -