zoukankan      html  css  js  c++  java
  • 反射程序集




             通过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层了呢?















                

  • 相关阅读:
    C#中提供的精准测试程序运行时间的类Stopwatch
    [转]SQLite数据库扫盲
    [转]c# 使用ChartDirector绘图的一些个人体会
    [转]SQLite内存数据库
    SQL Server 各种查询语句执行返回结果
    [转]浅谈 BigInteger
    [转]SQLite数据库连接方式
    ASP.NET 3.5 开发大全DOC版
    好像昨天不见了100块钱。
    热烈庆祝本人昨天终于申请得了google ad
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/6882928.html
Copyright © 2011-2022 走看看