zoukankan      html  css  js  c++  java
  • .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();
                }
            }
        }
    }
  • 相关阅读:
    Linux每天一个命令:cat
    python3 str或bytes转换函数
    python3获取指定目录内容的详细信息
    python3 简单进度条代码
    CNN review
    Hive -- 原理篇
    leetcode 4. 寻找两个正序数组的中位数 (二分)
    leetcode 680 验证回文字符串II (贪心)
    leetcode 面试题03 数组中重复的数字
    机器学习--SVM篇
  • 原文地址:https://www.cnblogs.com/sumuncle/p/4346873.html
Copyright © 2011-2022 走看看