关于反射
1.1 反射的作用简单来说,反射提供这样几个能力: 1、查看和遍历类型(及其成员)的基本信息和程序集元数据(metadata); 2、迟绑定(Late-Binding)方法和属性。 3、动态创建类型实例(并可以动态调用所创建的实例的方法、字段、属性)。序章中,我们所采用的那个例子,只是反射的一个用途:查看类型成员信息。接下来的几个章节,我们将依次介绍反射所提供的其他能力。 2. 反射程序集在.net中,程序集是进行部署,版本控制额基本单位,它包含了ixanggua你得模块和类型,下面如何通过反射获取程序集信息。 加载程序集 Assembly asm = Assembly.LoadFrom("Demo.dll"); Assembly asm = Assembly.Load("Demo"); Assembly asm =Assembly.LoadFrom(@"C:WINDOWSMicrosoft.NETFrameworkv2.0.50727System.Web.dll"); Assembly as = Assembly.GetExecutingAssembly();//返回当前执行的代码的程序集。 获取一个Type类型实例后,我们还可以使用该实例的Assembly属性来获取其所在的程序集 Type t = typeof(int) namespace Demo { public abstract class BaseClass { } public struct DemoStruct { } public delegate void DemoDelegate(Object sender,EventArgs e); public enum DemoEnum { terrible,bad,common=4,good,wonderful=8 } public interface IDemoInterface { void SayGreeting(string name); } public interface IDemoInterface2 {} public sealed class DemoClass:BaseClass,IDemoInterface,IDemoInterface2 { private string name; public string city; public readonly string title; public const string text = "Const Field"; public event DemoDelegate myEvent; public string Name { private get { return name; } set { name = value; } } public DemoClass() { title = "Readonly Field"; } public class NestedClass { } public void SayGreeting(string name) { Console.WriteLine("Morning :" + name); } } } ? ? public static void AssemblyExplore() { StringBuilder sb = new StringBuilder(); Assembly asm = Assembly.Load("Demo"); sb.Append("FullName(全名):" + asm.FullName + "n"); sb.Append("Location(路径):" + asm.Location + "n"); Type[] types = asm.GetTypes(); foreach (Type t in types) { sb.Append(" 类型:" + t + "n"); } Console.WriteLine(sb.ToString()); } 调用此方法可以获得程序集中的类型的信息 FullName(全名):Demo,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null Location(路径): E:MyAppTypeExplorerSimpleExplorerbinDebugDemo.dll 模块: Demo.dll 类型:Demo.BaseClass? 类型:Demo.DemoStruct 类型:Demo.DemoDelegate 类型:Demo.DemoEnum 类型:Demo.IDemoInterface 类型:Demo.IDemoInterface2 类型:Demo.DemoClass 类型:Demo.DemoClass+NestedClass ? 通过?? Type t = typeof(DemoClass); TypeExplore(t); 可以进一步获取类型里面的信息 。Type类提供 GetMembers()、GetMember()、FindMember()等方法用于获取某个成员类型。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |