2012-03-17 3 views
0

リフレクションを使用してプライベートメソッドを取得する際に問題があります。 BindingFlags.NonPublicとBindingFlags.Instanceを使用しても、動作しません。 HandleClientDrivenStatePropertyChangedは、CreateRadioPropertyInstancesメソッドと同じクラスで定義されています。.Netはリフレクションでプライベートメソッドを取得できません

class Program 
{ 
     static void Main(string[] args) 
     { 
     RadioPropertiesState state = new RadioPropertiesState(); 
     } 
} 

internal class RadioPropertiesState : BaseRadioPropertiesState 
{ 
} 

internal class BaseRadioPropertiesState 
{ 
    public BaseRadioPropertiesState() 
    { 
      CreateRadioPropertyInstances(); 
    } 

    private void CreateRadioPropertyInstances() 
    { 
      // get the method that is subscribed to the changed event 
      MethodInfo changedEventHandlerInfo = GetType().GetMethod(
       "HandleClientDrivenStatePropertyChanged", 
       BindingFlags.NonPublic | BindingFlags.Instance | 
       BindingFlags.IgnoreCase); 
    } 

    private void HandleClientDrivenStatePropertyChanged 
     (object sender, EventArgs e) 
    { 
    } 
} 

GetMethodはnullを返します。 何が問題なのですか?

は、あなたが正確にそれが宣言されたタイプではなく、派生型にGetMethodを呼び出す必要がプライベートメンバーを取得するには

+1

Strangeは、.NETでうまく動作します。4. BindingFlagsで試してみてください。 –

+0

もう1つの推測は、一部のアクセス許可が不足している可能性があるということです。 'class X'をどのように使って起動しますか?それはsmtと同様のドメインまたはリモートソースから読み込まれますか? –

+2

問題を示す短い*完全な*プログラムを表示してください。それはうまくいくはずです - もちろん、このメソッドが何らかの形で派生クラスで呼び出されると、それは見つからないでしょう... –

答えて

3

問題は、私は私のコメントで示唆されているように正確である - あなたはRadioPropertiesStateであるオブジェクトの実行時の型に基づく方法を見つけようとしている...しかし、それはそのタイプまたは可視で宣言されていませんそれに。

にご GetMethodの呼び出しを変更し

MethodInfo changedEventHandlerInfo = typeof(BaseRadioPropertiesState) 
             .GetMethod(...) 

、それが正常に動作します。

0

[コードを編集しました]。

このメソッドはプライベートなので、ここでは機能しません。

関連する問題