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















                

  • 相关阅读:
    支付业务的数据库表的设计
    数据库设计的一些参考(来源网上的一些帖子,仅供作者本人参考)
    Delphi 10.2的 更新说明,所有官方资料:新特征和Bugfix列表,所有工具开发说明
    日本太笨了,以小目标发动大战争,而且偷袭时候如小贼入室,一旦得手就仓皇逃窜
    理论经典:TCP协议的3次握手与4次挥手过程详解
    C++没有库则寸步难行,有库则几乎可以做任何事情——Bjarne Stroustrupi
    Ruby已经慢慢走向衰退了,那些年代久远而且小众的语言没有翻身的可能性
    前端面试题精选
    Spring MVC 基础
    NET WEB
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/6882928.html
Copyright © 2011-2022 走看看