加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

关于反射

发布时间:2020-12-14 03:22:14 所属栏目:大数据 来源:网络整理
导读:1.1 反射的作用 简单来说,反射提供这样几个能力: 1、查看和遍历类型(及其成员)的基本信息和程序集元数据(metadata); 2、迟绑定(Late-Binding)方法和属性。 3、动态创建类型实例(并可以动态调用所创建的实例的方法、字段、属性)。序章中,我们所采用的那个

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)
Assembly asm = t.Assembly;

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()等方法用于获取某个成员类型。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读