2011-12-07 156 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將返回空值。但是,如果使用枚舉 - Instance和nonpublic,則調用所需的方法。這兩者有什麼區別。當我不得不使用實例和公共/非公共組合時。一類受保護成員的思考

+0

這似乎是.Net 4.0中的一個變化:我有一個類似的代碼,可以在.Net 3.5中完美工作,但是我必須將該標誌從「NonPublic」更改爲「Public」才能在4.0上運行。 – Medinoc

回答

2

the documentation of GetMethod()

必須指定BindingFlags.InstanceBindingFlags.Static爲了獲得回報。

Instance/StaticPublic/NonPublic指定兩個不同的東西,你必須爲了得到結果同時指定。