zoukankan      html  css  js  c++  java
  • C#反射的简单示例

    反射(Reflection)可以在运行时获 得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员的名称、限定符和参数等反正说白了就是通过反射能够获取一个未知类的类型。下面通过代码来讲解

    1:反射的基本用法

    public class ReflectionTest {
            
            /// <summary>
            /// 反射名称
            /// </summary>
            public string ReflectionName { get; set; }
    
            public string GetName()
            {
                return "张三";
            }
        }
               Type type = typeof(ReflectionTest);
                string name = type.Name;//获取当前成员的名称
                string fullName = type.FullName;//获取类的全部名称不包括程序集
                string nameSpace = type.Namespace;//获取该类的命名空间
                var assembly = type.Assembly;//获取该类的程序集名
                var module = type.Module;//获取该类型的模块名            
                var memberInfos = type.GetMembers();//得到所有公共成员

     在控制台打印结果如下图:

     

               //获取当前执行代码的程序集
                Assembly assem = Assembly.GetExecutingAssembly();
                Console.WriteLine(assem.FullName);
    
                var types = assem.GetTypes();//程序集下所有的类
                Console.WriteLine("程序集包含的类型:");
                foreach (var item in types) {
                    Console.WriteLine("" + item.Name);
                }

    打印结果

     2:通过反射建立工厂

    public static T Instance<T>(string assembly, string type)
            {
                if (string.IsNullOrEmpty(type)) throw new ArgumentException("type:参数不能为空!");
    
                //1、获取有效的程序集
                Assembly mAssembly = string.IsNullOrEmpty(assembly) ? Assembly.GetCallingAssembly() : Assembly.Load(assembly);
                var t = (T) mAssembly.CreateInstance(type); 
                return t;
            }
    • 参数assembly 指的是程序dll的路径如果本地传空
    • 参数type 指的是指定类的路径

    调用:var assembly = Instance<DogInfo>("", "AenericApp.Entity.DogInfo");即可

    当然orm也是运用很多反射大家自己可以学习以上就是一个简单介绍

  • 相关阅读:
    【语言处理与Python】11.3数据采集
    【语言处理与Python】11.4使用XML\11.5使用Toolbox数据
    【语言处理与Python】11.1语料库结构:一个案例研究\11.2语料库生命周期
    【语言处理与Python】10.5段落语义层
    CentOS7.4 删除virbr0虚拟网卡
    套接字超时设置
    Linux命令进制转换、大小写转化
    网络编程第一卷读书笔记(随手记)
    linux下tcp选项TCP_DEFER_ACCEPT研究记录
    Cannot assign requested address出现的原因及解决方案
  • 原文地址:https://www.cnblogs.com/LipeiNet/p/4990580.html
Copyright © 2011-2022 走看看