• 反射器组件





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















                

  • 相关阅读:
    腾讯2016春招安全岗笔试题解析
    AlgorithmVisualizer
    agentzh --春哥--调试专家
    大话Java性能优化 BOOK
    《Linux内核分析》-----张超
    ROS中Mangle解析
    shell中trap捕获信号
    虚拟化技术性能总结:Zones, KVM, Xen
    Dtrace on Mac OS X
    linux内核学习-建议路线
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4592867.html
Copyright © 2020-2023  润新知