2011-12-07 13 views
3
using System; 
using System.Reflection; 

namespace Reflection 

{ 
    class Test 
    { 
     protected void methodname() 
     { 
      Console.WriteLine(("in the world of the reflection")); 
      Console.Read(); 
     } 
    } 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      // BindingFlags eFlags = BindingFlags.Default | BindingFlags.Instance | BindingFlags.Public|BindingFlags.NonPublic; 
      BindingFlags eFlags = BindingFlags.Instance|BindingFlags.NonPublic; 
      Test aTest = new Test(); 
      MethodInfo mInfoMethod = typeof(Reflection.Test).GetMethod("methodname", eFlags); 
      mInfoMethod.Invoke(aTest, null); 

     } 
    } 
} 

msdnによると、BindingFlags.Nonpublicは非プライベートメンバーにアクセスするために使用されます。この列挙体だけを使用すると、Getmethodはnull値を返します。しかし、enum-Instanceとnonpublicを使用する場合、必要なメソッドが呼び出されます。これら2つの違いは何ですか?私はインスタンスとパブリック/非パブリックの組み合わせを使用する必要があります。保護されたクラスメンバーの反映

+0

これは.Net 4.0で変更されたようです:.Net 3.5で完全に動作する同様のコードがありますが、4.0で動作させるには 'NonPublic'から' Public'にフラグを変更する必要がありました。 – Medinoc

答えて

2

あなたはどちらかBindingFlags.Instanceかを指定する必要があります。返品を受けるにはBindingFlags.Static

Instance/StaticPublic/NonPublic二つの異なるものを指定すると、あなたは結果を得るために両方を指定する必要があります。

0

列挙型を指定しない場合は、デフォルトが使用されます。そうした場合、あなたは両方を指定する必要があります。

公開または非公開(あるいはその両方)

  • staticまたはインスタンス(あるいはその両方)
  • +0

    デフォルトは、internalを意味します。 – Raghav55

    関連する問題