反射程序集

简介:          通过Type,我们可以对任何类型进行反射读取,同样,也可以把读取的对象的范围扩大。       一,关于程序集               在.net中,程序集是进行部署,版本控制的基本单元;               System.reflection命名空间下的Assembly类型,代表了一个程序集,并包含了关于程序集的信息。




         通过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#OOP之十三 组件、程序集与反射
C#OOP之十三 组件、程序集与反射
72 0
|
C# 数据库管理
不同程序集,名称空间类名和方法签名都一样的方法,如何调用
有时候,你可能会遇到这样的问题,不同程序集,名称空间类名和方法签名都一样的方法,如何调用。本文将介绍如何通过别名的方式来解决这个问题。
115 0
不同程序集,名称空间类名和方法签名都一样的方法,如何调用
|
Java C语言
类加载器与反射概述
类加载器与反射概述
144 0
类加载器与反射概述
|
存储 Java C#
30天C#基础巩固----程序集,反射
30天C#基础巩固----程序集,反射
106 0
30天C#基础巩固----程序集,反射
|
XML Java 数据格式
反射机制(什么是反射、反射操作构造器、方法、字段、反射加载资源)
反射机制(什么是反射、反射操作构造器、方法、字段、反射加载资源)
161 0
反射机制(什么是反射、反射操作构造器、方法、字段、反射加载资源)