zoukankan      html  css  js  c++  java
  • .Net之美读书笔记15

    .Net反射

    .Net 反射为:程序运行时,获取类型的元数据(对类型信息的描述)。这里对反射的应用小节一下。

    反射的入口(Type)

    Type为处理反射元数据的类。获取Type的途径。

    • Type ty = Type.GetType("System.Int32");
    • Type type = swim.GetType();
    • typeof(int);

    获取类型的基本信息

    获取类型相关的信息:类型名、类型全名、基类名以及对类型的一些判断IsXXX

        Type type = typeof(int);
        Console.WriteLine(type.Name);
        Console.WriteLine(type.FullName);
        Console.WriteLine(type.BaseType.Name);
        Console.WriteLine(type.IsInterface);
        Console.WriteLine(type.IsClass);
    

    获取类型的成员

    MemberInfo 包括属性、字段、函数、事件等

            MemberInfo[] memberInfo = type.GetMembers();
            foreach (MemberInfo mi in memberInfo)
            {
                Console.WriteLine(mi.Name);
            }
    
            Console.WriteLine("********************");
            FieldInfo[] fieldInfo = type.GetFields();
            foreach(FieldInfo fi in fieldInfo)
            {
                Console.WriteLine(fi.Name);
            }
    
            Console.WriteLine("********************");
            PropertyInfo[] propertyInfo = type.GetProperties();
            foreach(PropertyInfo pi in propertyInfo)
            {
                Console.WriteLine(pi.Name);
            }
            Console.WriteLine("********************");
            MethodInfo[] method = type.GetMethods();
            foreach (MethodInfo md in method)
            {
                Console.WriteLine(md.Name);
            }
    

    反射创建实体

    新建类Person

    public class Person
    	{
    		public string ID { get; set; }
    		public string Name { get; set; }
    		public string Gender { get; set; }
    		public DateTime Birthday { get; set; }
    
    		public virtual void Study()
    		{
    			Console.WriteLine("I am a person.I must study!");
    		}
    	}
    
    1. 根据类型动态创建方法1
        Type type = typeof(Person);
        Assembly asm = Assembly.GetExecutingAssembly();
        object obj1 = asm.CreateInstance(type.FullName);
    
    1. 方法二
    object obj2 = Activator.CreateInstance(null, type.FullName).Unwrap();
    
    1. 动态调用方法1
    type.InvokeMember("Study", BindingFlags.InvokeMethod, null, obj1, null);
    
    1. 动态调用方法二
    	MethodInfo mi1 = type.GetMethod("Study");
        mi1.Invoke(obj2,null);
    
    1. 动态修改属性值与取值
    	PropertyInfo pi1 = type.GetProperty("Name");
        pi1.SetValue(obj1, "Hello World!");
        Console.WriteLine(pi1.GetValue(obj1));
    

    程序集的反射

    获取程序集的方式:Assembly asm = Assembly.LoadFrom("Demo.dll").程序集写有模块,通过反射可以得到程序集信息。

    特性(Attribute)

    1. 继承System.Attribute类,要自定义特性类添加Attribute后缀
    2. 获取属性的自定义特性GetCustomAttributes()
  • 相关阅读:
    jmeter实现文件下载
    三大主流负载均衡
    如何实现从登录接口响应数据中提取JSESSIONID
    URL构成及各个协议默认端口
    git提交代码报:fatal: Unable to create 'E:/testGit/test/.git/index.lock': File exists.
    MySql数据库慢查询
    mongdb创建自增主键(primary key)的相关讨论
    自定义延时查询控件---valen
    Systemd Unit文件中PrivateTmp字段详解-Jason.Zhi
    mysql create table
  • 原文地址:https://www.cnblogs.com/LoveTomato/p/8135416.html
Copyright © 2011-2022 走看看