博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#反射
阅读量:4597 次
发布时间:2019-06-09

本文共 2428 字,大约阅读时间需要 8 分钟。

1.什么是反射(Reflection)

System.Reflection 命名空间中的类与 System.Type 使你能够获取有关加载的程序集和其中定义的类型的信息,如类、接口和值类型。

2.反射能干什么

可以使用反射在【运行时】创建、调用和访问类型实例。说白了就是通过反射能够获取一个未知类的类型。

3.通过代码解读反射

  • System.Type获取有关加载的程序集和其中定义的类型的信息
public class ReflectionTest {                ///         /// 反射名称        ///         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();//得到所有公共成员
  • 反射构造带参的例子(带参)
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Reflection;namespace FanShe3{    class Test    {        public Test(string Say)        {            Console.WriteLine(Say);        }    }    class Program    {        static void Main(string[] args)        {            Test t;            string Say = "哈哈!!创建成功";            //开始创建反射,这个是获取当前程序集的意思,如果需要反射类库可以使用Assembly.Load的方法            Assembly asm = Assembly.GetExecutingAssembly();            //需要注意的地方是,如果反射的构造函数带参只是一个,这里创建的也必须是一个参数的Object数组,而且顺序也必须和构造函数一样            object[] Obj = new object[1];            Obj[0] = Say;            t = (Test)asm.CreateInstance("FanShe3.Test", true, BindingFlags.Default, null, Obj, null, null);            Console.ReadKey();        }    }}
  • 传递对象
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Reflection;namespace FanShe4{    class Test    {        public Test(Test2 t2)        {            t2.Say();        }    }    public class Test2    {        public void Say()        {            Console.WriteLine("哈哈!!创建成功");        }    }    class Program    {        static void Main(string[] args)        {            Test t;            Test2 t2 = new Test2();            //开始创建反射,这个是获取当前程序集的意思,如果需要反射类库可以使用Assembly.Load的方法            Assembly asm = Assembly.GetExecutingAssembly();            //需要注意的地方是,如果反射的构造函数带参只是一个,这里创建的也必须是一个参数的Object数组,而且顺序也必须和构造函数一样            object[] Obj = new object[1];                Obj[0] = t2;            t = (Test)asm.CreateInstance("FanShe4.Test", true, BindingFlags.Default, null, Obj, null, null);            Console.ReadKey();        }    }}

转载于:https://www.cnblogs.com/ButterflyEffect/p/10265941.html

你可能感兴趣的文章
JS 正则匹配字符串
查看>>
Safe Area Layout Guide before iOS 9.0
查看>>
Machine learning - Introduction to Gaussian processes 学习记录
查看>>
[Computer Networking] {CMU14-740} Lecture 7: Peer to Peer Networking
查看>>
【转】马士兵_JAVA自学之路
查看>>
KTV项目总结
查看>>
Java序列化与反序列化
查看>>
windows eclipse IDE打开当前类所在文件路径
查看>>
memcache服务器端参数说明
查看>>
java动态生成验证码
查看>>
SQL SERVER 查询性能优化——分析事务与锁(一)
查看>>
WCF学习之旅—请求与答复模式和单向模式(十九)
查看>>
oracle权限
查看>>
Python 教程阅读笔记(十):标准库一瞥(续)
查看>>
[转] 演示Flash Text Engine(FTE) 的baseline相关属性
查看>>
Java - 35 Java 实例
查看>>
为Liferay开发应用程序
查看>>
安卓绘图引擎
查看>>
写一篇 Bootstrap弹窗确认的文章。本周完成
查看>>
【转】Sublime text 3 中文文件名显示方框怎么解决
查看>>