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

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

         通过Type,我们可以对任何类型进行反射读取,同样,也可以把读取的对象的范围扩大。

      一,关于程序集

              在.net中,程序集是进行部署,版本控制的基本单元;

              System.reflection命名空间下的Assembly类型,代表了一个程序集,并包含了关于程序集的信息。

             获取assembly对象的方法:

                  loadForm 参数:程序集的文件名称(如果加载一个不属于当前项目的程序集,则要写上全名)

                  Load  参数:提供程序集名称即可,而非文件名称。

 

    二,反射程序集示例

              首先,我们建立如下结构解决方案:

              

            然后在Test类库中的class1里面添加如下测试内容:

             

namespace Test{    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;        private 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);        }            }}

       接着,我们就使用Assembly来获取程序集:

 

  

namespace 反射程序集{    class Program    {        static void Main(string[] args)        {            AssemblyExplore();        }        //查看Test程序集中的全部类型        public static void AssemblyExplore() {            StringBuilder sb = new StringBuilder();            Assembly asm = Assembly.Load("Test");  //加载Test            sb.AppendLine("全名:"+asm.FullName); //输出全名            sb.AppendLine("路径:"+asm.Location);//输出路径            Module[] modules = asm.GetModules();  //获取程序集中所有模块            foreach (Module model in modules )   //遍历模块数组            {                sb.AppendLine("模块:"+model);                Type[] types = model.GetTypes();  //得到模块里面的各种类,接口啥的。。。                foreach (Type t in types)                   {                    sb.AppendLine("  类型:"+t);   //看看啥类型滴。。。。                }            }            Console.WriteLine(sb.ToString());                }    }}

     查看我们运行结果:         

     

          

    

          真的好神奇呀~~~等等,是不是想起以前设计模式中读取配置文件,然后反射加载D层了呢?

            

你可能感兴趣的文章
微信小程序开发-框架
查看>>
redo、undo、binlog的区别
查看>>
RecycleView设置顶部分割线(记录一个坑)
查看>>
汉字转拼音 (转)
查看>>
会计基础_001
查看>>
小程序: 查看正在写的页面
查看>>
Jenkins持续集成环境部署
查看>>
MWeb 1.4 新功能介绍二:静态博客功能增强
查看>>
预处理、const与sizeof相关面试题
查看>>
爬虫豆瓣top250项目-开发文档
查看>>
有趣的数学书籍
查看>>
teamviewer 卸载干净
查看>>
eclipse的maven、Scala环境搭建
查看>>
架构师之路(一)- 什么是软件架构
查看>>
USACO 土地购买
查看>>
【原创】远景能源面试--一面
查看>>
B1010.一元多项式求导(25)
查看>>
10、程序员和编译器之间的关系
查看>>
配置 RAILS FOR JRUBY1.7.4
查看>>
AndroidStudio中导入SlidingMenu报错解决方案
查看>>