一旦得到類對(duì)象,上表中所列的方法就能被叫來調(diào)用reflaction.第一個(gè)例子將檢查在CSharpReflectionSamples.Reflect類中的得到方法的信息。第一塊代碼用來定義類中的每個(gè)方法的名字,第二塊代碼將闡述得到方法信息。向下面所展示的,我們將用一個(gè)數(shù)組來保存用GetMethod()方法返回的方法信息。MethodInfo類包含信息為方法的名字,不管是否是虛擬的,它都是可見的,等等。
namespace CSharpReflectionSamples { using System; using System.Reflection;
/// <summary> /// Summary description for Client. /// </summary> public class Client { public static void Main() { // the typeof operator and the GetType method // both return a 'Type' object. Type type1 = typeof(Reflect); Reflect objTest = new Reflect(0); Type type2 = objTest.GetType();
Console.WriteLine("Type of objTest is {0}", type2); Console.WriteLine(); // pause Console.ReadLine();
// reflect method information MethodInfo[] minfo = type1.GetMethods(); // iterate through methods foreach (MethodInfo m in minfo) { Console.WriteLine(m); } Console.WriteLine(); } } }
下一個(gè)例子將展示動(dòng)態(tài)得到對(duì)象有可能接觸的每個(gè)構(gòu)造器的信息。類似與上面的例子,我們將返回一個(gè)包含每個(gè)構(gòu)造器的信息ConstructorInfo對(duì)象。
namespace CSharpReflectionSamples { using System; using System.Reflection;
/// <summary> /// Summary description for Client. /// </summary> public class Client { public static void Main() { // the typeof operator and the GetType method // both return a 'Type' object. Type type1 = typeof(Reflect); Reflect objTest = new Reflect(0); Type type2 = objTest.GetType();
Console.WriteLine("Type of objTest is {0}", type2); Console.WriteLine(); // pause Console.ReadLine();
// reflect constructors ConstructorInfo[] cinfo = type1.GetConstructors(); // iterate through constructors foreach (ConstructorInfo c in cinfo) { Console.WriteLine(c); } } } }
最后一部分,也許是reflection名字空間中最激動(dòng)人心的部分,是在運(yùn)行時(shí)動(dòng)態(tài)調(diào)用類方法。有兩種方法,首先,我們將建立一個(gè)數(shù)組來存儲(chǔ)參數(shù),這些參數(shù)被構(gòu)造器用來建造對(duì)象。第二,一個(gè)System.Object對(duì)象將對(duì)抗CreateInstance方法的對(duì)象。以得到想得到對(duì)象的例子。最后,當(dāng)我們有了對(duì)象的資料,我們能夠調(diào)用任何使用MethodParm數(shù)組的方法。下面是代碼:
namespace CSharpReflectionSamples { using System; using System.Reflection;
/// <summary> /// Summary description for Client. /// </summary> public class Client { public static void Main() { // the typeof operator and the GetType method // both return a 'Type' object. Type type1 = typeof(Reflect); Reflect objTest = new Reflect(0); Type type2 = objTest.GetType();
// dynamic creation and invocation // instantiate the Reflect object, passing // a value of 1 to the constructor object[] oConstructParms = new object[] {1}; object obj = Activator.CreateInstance(type1, oConstructParms); // invoke method of reflect object object[] oMethodParms = new object[] {17}; int intResult = (int)type1.InvokeMember("AMethod", BindingFlags.Default | BindingFlags.InvokeMethod, null, obj, oMethodParms); Console.WriteLine("Result of calling AMethod on {0} is {1}", type1.Name, intResult); // pause Console.ReadLine(); } } }
這篇文章闡述了.net Reflaction的基礎(chǔ),在下一部分,我將和大家討論進(jìn)一步的話題,比如,動(dòng)態(tài)發(fā)布中間語言,旗幟綁定,和中間語言原則。
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!