博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于反射
阅读量:4553 次
发布时间:2019-06-08

本文共 2470 字,大约阅读时间需要 8 分钟。

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:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.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:\MyApp\TypeExplorer\SimpleExplorer\bin\Debug\Demo.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()等方法用于获取某个成员类型。

转载于:https://www.cnblogs.com/whl4835349/p/9274763.html

你可能感兴趣的文章
[Experiences]Code Snippet:自定义可重用的代码段
查看>>
ionic 轮播
查看>>
Java学习不走弯路教程(17 Tomcat服务器)
查看>>
PHP中二维数据格式的问题
查看>>
Faster-RCNN Pytorch实现的minibatch包装
查看>>
[LeetCode] 168. Excel Sheet Column Title_Easy tag: Math
查看>>
[Ionic] Build and Run an Ionic App from Scratch
查看>>
WordPress Attack Scanner插件多个信息泄露漏洞
查看>>
纯手写wcf代码,wcf入门,wcf基础教程
查看>>
关于8.0.15版本的mysql下载与安装
查看>>
Redis主从复制看这篇就够了
查看>>
部署和调优 2.3 tomcat中JDK安装
查看>>
洛谷 P1202 [USACO1.1]黑色星期五Friday the Thirteenth 题解
查看>>
(4.20)SQL Server数据库启动过程,以及启动不起来的各种问题的分析及解决技巧...
查看>>
余弦相似度
查看>>
Python简介
查看>>
利用make -n 来检查Makefile的执行规则
查看>>
关于先创建对象和后创建对象的区别,如图
查看>>
解决windows mobile项目编译时间很长的方法
查看>>
[vijos1011]滑雪
查看>>