.net的reflection(2)

.net的reflection(2)


Author: 飞鹰  &;nbspFrom:Internet


               
  飞鹰编译,www.aspcool.com版权所有,转载时请保留此信息。
 
  一旦得到类对象,上表中所列的方法就能被叫来调用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的基础,在下一部分,我将和大家讨论进一步的话题,比如,动态发布中间语言,旗帜绑定,和中间语言原则。
 
    (2005-5-03:02:10)
 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 警告:持续变种木马正在发起农历新年攻势!
 您可能对 [C#] 的这些文章也感兴趣:
论C#变得越来越臃肿是不可避免的
查询IP所在区段(C#)
在C#中利用SharpZipLib进行文件的压缩和解压缩
C# - Append a host header by code in IIS
在C#中调用Microsoft.VisualBasic命名空间下的类型验证函数
使用泛型实现单例提供者(原创翻译)
C#2 anonymous methods
Master Pages: Tips, Tricks, and Traps
Microsoft .NET 框架资源基础
基于.Net平台应用程序唯一运行实例实现
.net Framework 2.0 专门提供了配置文件的操作
正确实现 IDisposable