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也是运用很多反射大家自己可以学习以上就是一个简单介绍

  • 相关阅读:
    UVA 1025 A Spy in the Metro DP水题
    ZOJ 3814 Sawtooth Puzzle BFS
    ZOJ 3816 Generalized Palindromic Number
    UVA 10859 Placing Lampposts 树形DP
    UVA 11825 Hackers' Crackdown 状压DP
    POJ 2887 Big String 线段树 离线处理
    POJ 1635 Subway tree systems Hash法判断有根树是否同构
    BZOJ 3110 k大数查询 & 树套树
    sdoi 2009 & 状态压缩
    来自于2016.2.24的flag
  • 原文地址:https://www.cnblogs.com/LipeiNet/p/4990580.html
Copyright © 2011-2022 走看看