zoukankan      html  css  js  c++  java
  • 反射

    假设现在有一个Dog类,有三个字段,一个方法,通过反射来操作字段和方法

    类如下:

    namespace C03反射
    {
        public class Dog
        {
            public string name;
            public int age;
            private bool gender;
    
            public string ShoutHi()
            {
                return this.name + "," + this.age + " , " + this.gender;
            }
        }
    }

    反射调用:

        private void btnAssemblyTest_Click(object sender, EventArgs e)
            {
                //***********************普通 方式 创建 和 调用***********************
                Dog d = new Dog();
                d.name = "123";
                d.ShoutHi();
    
                //***********************反射 获取 类的成员***********************
                //1.获取当前正在运行的  程序集(Assembly)对象
                //或者可以加载外部DLL  
    //Assembly myAssembly = Assembly.LoadFrom("d:debugDog.dll");
                //Type svcTypes = myAssembly.GetType("C03反射.Dog");//类名,程序集名称

    Assembly ass = this.GetType().Assembly;//获取当前运行对象所属的类所在的程序集对象 //2.获取 程序集中的 Dog类的 类型(Type)对象 Type tDog = ass.GetType("C03反射.Dog"); //3.获取 Dog 类的 name 字段对象 FieldInfo fInfo = tDog.GetField("name"); //4.获取 Dog 类的 ShoutHi 方法对象 MethodInfo mInfo = tDog.GetMethod("ShoutHi"); //***********************反射 调用 类的成员*********************** //1.根据 Dog的Type对象,实例化一个Dog对象 Dog d2 = Activator.CreateInstance(tDog) as Dog; //Dog d3 = Activator.CreateInstance<Dog>(); //2.使用 Dog类的 name字段对象,为 d2实例 的 name字段赋值 //相当于:d2.name="小白" fInfo.SetValue(d2, "小白"); //3.使用 Dog类的 ShoutHi方法对象,调用 d2实例的 ShoutHi方法 // 其实就是执行方法体代码,并将d2设置为方法里的this //相当于:d2.ShoutHi(); string strRes = mInfo.Invoke(d2, null).ToString(); MessageBox.Show(strRes); }

     获取类型的方法:

        private void btnGetType01_Click(object sender, EventArgs e)
            {
                Assembly ass = this.GetType().Assembly;
                //通过程序集获取 Type
                //1.通过 类的全名称 获取 类的类型对象
                Type t = ass.GetType("C03反射.Dog");
                //2.通过 程序集 获取所有的 公共的(puclic) 类型
                Type[] types = ass.GetExportedTypes();
                //3.通过 程序集 获取所有的类型
                Type[] typesAll = ass.GetTypes();
    
                //获取单个 类型对象
                //1.通过类 直接过去 类型对象
                Type t2 = typeof(Dog);
                //2.通过对象 来获取 类型对象
                Type t3 = this.GetType();
    
                Dog d3 = new Dog();
                Type t4 = d3.GetType();
    
    
            }
  • 相关阅读:
    mvc5+ef6+Bootstrap 项目心得--创立之初
    C# StopWatch的使用
    MVC Form异步请求
    bootstrap-datepicker带中文的js文件
    bootstrap
    mvc5+ef6+Bootstrap 项目心得--WebGrid
    mvc5+ef6+Bootstrap 项目心得--身份验证和权限管理
    关于mvc5+EF里面的db.Entry(model).State = EntityState.Modified报错问题
    将DBF文件导入Sqlserver数据库
    MySQL主从报错解决:Failed to initialize the master info structure
  • 原文地址:https://www.cnblogs.com/happygx/p/3390230.html
Copyright © 2011-2022 走看看