也算记录自己的学习篇=。= 适合入门看 这里简单介绍下MethodInfo和他基本的几个方法
#简介
MethodInfo就是通过反射指定类获取到的 属性并提供对方法函数数据的访问。
##1.如何获取?
Type.GetMethod(String) 获取该类的指定的名字String公开的函数方法 如果私有会为空
Type.GetMethod(String,BindingFlags) 获取该类的指定的名字String,和指定类型BindingFlags的函数方法
Type.GetMethods() 获取该类的所有公开的函数方法
Type.GetMethods(BindingFlags) 获取该类的所有指定类型BindingFlags的函数方法

####例子

######先定义个类型

   public class Method{public int A;public string B;public void M(string data){Console.WriteLine(data);}public void M1(){Console.WriteLine("M1");}private void M2(){Console.WriteLine("M2");}}

######Type.GetMethod(String) 获取该类的指定的名字String公开的函数方法 如果私有会为空

        typeof(Method).GetMethod("M1").Invoke(method,null);        typeof(Method).GetMethod("M").Invoke(method, new string[] { "凉_开果"});Console.ReadKey();

结果

可以看出来invoke就是启动函数的 第一个是触发的类,第二个是要代入的参数

######Type.GetMethod(String,BindingFlags) 获取该类的指定的名字String,和指定类型BindingFlags的函数方法

可以看出来如果不指定BindingFlags是搜索不到了

看看加上之后的

            typeof(Method).GetMethod("M1").Invoke(method,null);        typeof(Method).GetMethod("M").Invoke(method, new string[] { "凉_开果"});typeof(Method).GetMethod("M2",BindingFlags.Instance|BindingFlags.NonPublic).Invoke(method, null);//BindingFlags.Instance(对象) 和 BindingFlags.Static(静态) 必须有一个,Console.ReadKey();

######Type.GetMethods() 获取该类的所有公开的函数方法
######Type.GetMethods(BindingFlags) 获取该类的所有指定类型BindingFlags的函数方法

  MethodInfo[] Methods1=  typeof(Method).GetMethods();MethodInfo[] Methods2 = typeof(Method).GetMethods(BindingFlags.Instance | BindingFlags.NonPublic);foreach (var item in Methods1){Console.WriteLine("不加BindingFlags" + item.Name);}foreach (var item in Methods2){Console.WriteLine("加BindingFlags" + item.Name);}Console.ReadKey();

结果

##2.属性

这里就列几个基础的=。=完全的可以自己 去看c#的API

属性 作用
ReturnType 获取这个函数方法返回的类型
MemberType 返回一个MemberTypes枚举表示 他是个方法。
DeclaringType 获取是谁声明该模块成员的类的Type
还有一堆is开头的bool属性 都是字面意思 就是判断是否含有

##3.方法 =。=我就写下基础的几个

  • 接着上面声明的类就好

  • 运行函数Invoke(object obj, object[] parameters);

    • 上面已经用过了
    •   typeof(Method).GetMethod("M1").Invoke(method,null);        typeof(Method).GetMethod("M").Invoke(method, new string[] { "凉_开果"});
      
    • 结果
    • 可以看出来invoke就是启动函数的 第一个是触发的类,第二个是要代入的参数
  • 转成委托 Delegate CreateDelegate(Type delegateType, object target);

    • 和Delegate的CreateDelegate一样的就是少写了个指定MethodInfo 大概用途是 注册事件时候,需要反射出函数的委托进行注册,

    •        static event Action A1;static event Action<string> A2;static void Main(string[] args){Method Instance = Activator.CreateInstance(typeof(Method)) as Method;A1?.Invoke();Console.WriteLine("没注册之前");A1+= Instance.GetType().GetMethod("M1").CreateDelegate(typeof(Action), Instance) as Action;A1?.Invoke();Console.WriteLine("注册之后");Console.ReadKey();}
      
    • ######结果

      • 可以看出 事件注册之前没东西的通过转化成的委托进行注册 就有了 第二个赋值的是包含这个函数的实例化对象
  • 找到拥有该函数初始父类 MethodInfo GetBaseDefinition();

    • 当在派生类中被重写时,为直接或间接的基类上的方法返回MethodInfo 就是找到他的 谁创建的这个函数
    • #####先声明代码
      •     public class BaseMethod{public virtual void M3(){}}public class Method: BaseMethod{public int A;public string B;public void M( string data){Console.WriteLine(data);}public void M1(){Console.WriteLine("M1");}private void M2(int data){Console.WriteLine("M2");}public override void M3(){base.M3();}}
        
    • #####例子
      •  Console.WriteLine(typeof(Method).GetMethod("M3").ReflectedType.Name);Console.WriteLine("创建他的父类"+typeof(Method).GetMethod("M3").GetBaseDefinition().ReflectedType.Name);Console.WriteLine(typeof(Method).GetMethod("ToString").ReflectedType.Name);Console.WriteLine("创建他的父类" + typeof(Method).GetMethod("ToString").GetBaseDefinition().ReflectedType.Name);Console.ReadKey();
        
      • 结果

####好了 差不多结束了=。= 不定期更新下篇

##u3d萌新QQ群844087555——一个除了unity3d啥都会的群

c#反射入门篇(Reflection)——MethodInfo 发现方法的属性相关推荐

  1. c#反射入门篇(Reflection)——PropertyInfo 发现属性

    简介 发现属性 (Property) 的属性 (Attribute) 并提供对属性 (Property) 元数据的访问. 1.如何获取? Type.GetProperty(String) 获取该类的指 ...

  2. Jav 入门篇(35)方法引用

    一.方法引用 1.1 概述 Lambda表达式中,要重写的方法可以用另一个简单的方法所代替,即返回值和所需参数一致,就可以使用方法引用的来进一步简化Lambda表达式. 1.2 对象::实例方法 Co ...

  3. C#学习常用命名空间【1000】---System.Reflection 之MethodInfo(方法信息类)

    MethodInfo 类         发现方法的属性并提供对方法元数据的访问. 命名空间:                   System.Reflection 程序集:         msc ...

  4. 详解Java反射机制------入门篇

    一.什么叫Java反射机制? Java中的反射机制是指在运行状态中,对于任意一个类,能够动态获取这个类中的属性和方法:对于任意一个对象,都能够任意调用它的属性和方法.这种动态获取类的信息以及动态调用对 ...

  5. python安卓自动化实现方法_带你用 Python 实现自动化群控(入门篇)

    原标题:带你用 Python 实现自动化群控(入门篇) 来自公众号: AirPython 1. 前言 群控,相信大部分人都不会陌生!印象里是一台电脑控制多台设备完成一系列的操作,更多的人喜欢把它和 H ...

  6. consul服务发现入门篇

    前言:常用的服务发现有 zookeeper:https://zookeeper.apache.org/ etcd:https://coreos.com/etcd/ consul:https://www ...

  7. Lua快速入门篇(基础概述)(Yanlz+toLua+xLua)

    <Lua热更新> ##<Lua热更新>发布说明: ++++"Lua热更新"开始了,立钻哥哥终于开始此部分的探索了. ++++作为游戏发布迭代的重要技术:Lu ...

  8. C#秘密武器之反射——基础篇

    先来一段有用的反射代码 namespace Calculator { public interface Iwel { String Print(); } } namespace Calculator ...

  9. C#反射取得方法、属性、变量

    C#反射(取得方法.属性.变量) 程序结构: 学生字典类(S0001): using System; using System.Collections.Generic; using System.Li ...

最新文章

  1. 推荐算法工程师的成长之道
  2. 新手XP下硬盘安装ubuntu10.10全程解析
  3. PHP学习笔记-PHP语言基础1
  4. 苹果App Icon的问题
  5. Dubbo Admin服务测试功能
  6. 数据结构中“图”的相关概念理解
  7. JS中的Map和Set实现映射对象
  8. SpringMVC框架、Spring boot框架、SSM區別
  9. oracle中查找某用户执行某张表的操作操作记录
  10. 如何使用DDMS读取data/data目录下的文件
  11. 凸优化第二章凸集 2.6 对偶锥与广义不等式
  12. msi z170 网卡 linux,z170+skylake黑苹果安装笔记
  13. 使用SpreadJS迅速开发一套属于自己的欧洲杯赛程小工具
  14. 用java输入学生姓名查询成绩_java实现学生成绩录入系统
  15. 【delphi】开发微信小程序后台控件(一)(含源代码、演示程序、控件使用帮助)
  16. 【Error2013:2013 lost connection to MYSQL server在处理大量数据运行中报错解决方法】
  17. Emoji 的处理 - 使用正则表达式匹配所有 Emoji表情
  18. QQ9.0需要安装两个插件
  19. 高德地图使用(一)---添加自定义标注和标注事件
  20. 图片裁剪cropperjs的使用

热门文章

  1. 安装版系统集合||纯净版系统集合
  2. Web漏洞扫描篇-Nessus使用
  3. 一个简单51c语言程序,三个简单的C语言程序(上)
  4. Spring Clound项目打包发布到centos7
  5. 微信中关闭网页输入内容时的安全提示 [干掉 “防盗号或诈骗,请不要输入QQ密码”]...
  6. 使用word中的宏实现选中指定类型表格,并且批量修改样式结构
  7. 如何做好社群运营转化?
  8. 如何看待自己的第一份工作
  9. 首行缩进2字符,CSS文本外观之文本缩进
  10. laravel5.6安装laravel-wechat 实现微信授权登录(公众号)