• .NET反射应用


         .Net中,在编写框架时,反射是最长用的一个知识点,在这举个小例子,旨在说明反射如何应用;本文只程序中只涉及到System.Type的应用,通过这个类可以访问关于任何数据类型的信息,注释部分涉及到System.Reflection.Assembly类,该类用于访问给定程序集的相关信息,或者把这个程序集加载到程序中。
    示例代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Reflection;
    
    namespace ConsoleReflect
    {
        class Program
        {
            static void Main(string[] args)
            {
                ///对类库的调用,不详解
                //Assembly assmbly = Assembly.LoadFile("类库目录");
                //Type[] lstType = assmbly.GetExportedTypes();
                List<Type> lstType = new List<Type>();
                string a = new Program().GetType().Namespace;
                Type typeA = Type.GetType(new Program().GetType().Namespace + "." + "PrinterA", true, true);
                Type typeB = Type.GetType(new Program().GetType().Namespace + "." + "PrinterB", true, true);
                lstType.Add(typeA);
                lstType.Add(typeB);
                foreach (Type type in lstType)
                {
                    var temp = Activator.CreateInstance(type);
                    MethodInfo method = type.GetMethod("Print");
                    object[] obj = new object[1];
                    obj[0] = type.Name;
                    method.Invoke(temp, obj);
                }
            }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleReflect
    {
        class PrinterA
        {
            public void Print(object obj)
            {
                if (obj != null)
                {
                    Console.WriteLine(obj.ToString());
                }
                else
                {
                    Console.WriteLine("PrinterA参数为空!");
                    Console.Read();
                }
            }
        }
    }
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleReflect
    {
        class PrinterB
        {
            public void Print(object obj)
            {
                if (obj != null)
                {
                    Console.WriteLine(obj.ToString());
                    Console.Read();
                }
                else
                {
                    Console.WriteLine("PrinterB参数为空!");
                    Console.Read();
                }
            }
        }
    }
  • 相关阅读:
    京东Java面试题(二)
    京东Java面试题(一)
    阿里java面试题
    Java垃圾回收机制
    MyBatis面试题
    Java IO流总结
    Spring中文文档
    Vue.js实战之组件之间的数据传递
    Vue.js实战之Vuex的入门教程
    Vue系列——在vue项目中使用jQuery及其第三方插件
  • 原文地址:https://www.cnblogs.com/sumuncle/p/4346873.html
Copyright © 2020-2023  润新知