- PR -

GetMethod() で基底クラスのメソッド情報を取得できない?

1
投稿者投稿内容
ほげた
ベテラン
会議室デビュー日: 2002/05/08
投稿数: 67
お住まい・勤務地: なごやん
投稿日時: 2005-08-09 02:51
ほげたです。

あるクラスのメソッドをリフレクションで呼び出そうとしたところ、
そのクラス(仮にAクラス)で定義したメソッドのMethodInfoは取得できるのですが
基底クラス(仮にSクラス)のメソッドのMethodInfoが取得できません。

以下のコードを書くと、AクラスのメソッドやSクラスの
public/protected なメソッドは1つ目のGetMethod()で取得できますが、
Sクラスの internal/private なメソッドは
if文の中にあるGetMethod()でないと取得できないのです。

コード:

BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;

Type type = obj.GetType();
MethodInfo info = type.GetMethod("hoge", flags);
if (info == null)
{
    // 基底クラスのメソッドを取得
    info = type.BaseType.GetMethod("hoge", flags);
}


BindingFlagsをいろいろ変えて試したのですが、
結局わからずじまいで、上記コードをそのまま埋め込んでます。
どなたか、正しい方法を教えていただけないでしょうか。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-08-09 09:53
こんにちは、じゃんぬ です。

System.Reflection.BindingFlags.DeclaredOnly をつけてもダメでしょうか?

単に継承されただけのメソッドではなく、
Type で宣言されたメソッドだけを検索する場合は BindingFlags.DeclaredOnly。
との記述があります。



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-08-09 12:35
ではなく、逆に 親クラスの private なメソッドを
子クラスの Type から取得しようとしている、と認識しているのですが。

それって可能なの?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-08-09 13:12
引用:

それって可能なの?


あれ? BaseTypeって書いて...
あ、その前の段階 GetMethod のお話でしたか... orz



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ほげた
ベテラン
会議室デビュー日: 2002/05/08
投稿数: 67
お住まい・勤務地: なごやん
投稿日時: 2005-08-09 18:31
ほげたです。

にしざきさんの指摘にあるように、
子クラスには隠蔽される親クラスのメソッドを
子クラスのTypeから取得すること自体が間違いのようです。

リフレクションを使ってprivateなメソッドを呼び出しているうちに
「何でもあり」な気分になってました。

じゃんぬさんもありがとうございました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-08-09 19:35
引用:

リフレクションを使ってprivateなメソッドを呼び出しているうちに
「何でもあり」な気分になってました。


そうそう。(^^)
Assembly から Invoke とかやってると... 特に。



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

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