<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      .net的reflection (2)

      [摘要]一旦得到類對象,上表中所列的方法就能被叫來調用reflaction.第一個例子將檢查在CSharpReflectionSamples.Reflect類中的得到方法的信息。第一塊代碼用來定義類中的每個...
      一旦得到類對象,上表中所列的方法就能被叫來調用reflaction.第一個例子將檢查在CSharpReflectionSamples.Reflect類中的得到方法的信息。第一塊代碼用來定義類中的每個方法的名字,第二塊代碼將闡述得到方法信息。向下面所展示的,我們將用一個數組來保存用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();
      }
      }
      }

      下一個例子將展示動態得到對象有可能接觸的每個構造器的信息。類似與上面的例子,我們將返回一個包含每個構造器的信息ConstructorInfo對象。

      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名字空間中最激動人心的部分,是在運行時動態調用類方法。有兩種方法,首先,我們將建立一個數組來存儲參數,這些參數被構造器用來建造對象。第二,一個System.Object對象將對抗CreateInstance方法的對象。以得到想得到對象的例子。最后,當我們有了對象的資料,我們能夠調用任何使用MethodParm數組的方法。下面是代碼:

      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的基礎,在下一部分,我將和大家討論進一步的話題,比如,動態發布中間語言,旗幟綁定,和中間語言原則。





      日韩精品一区二区三区高清