编程语言
首页 > 编程语言> > c#反射入门篇(Reflection)——MethodInfo 发现方法的属性

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

作者:互联网

网站:https://www.jianshu.com/p/52dc85668d00

也算记录自己的学习篇=。= 适合入门看 这里简单介绍下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();

 

 

结果  

 

 

  image.png

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

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

 

 

image.png

可以看出来如果不指定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();
 

 

 

image.png
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();

 

 

结果  

 

 

image.png

2.属性

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

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

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



作者:懒_开果
链接:https://www.jianshu.com/p/52dc85668d00
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:Console,Reflection,c#,GetMethod,入门篇,BindingFlags,typeof,WriteLine,Method
来源: https://www.cnblogs.com/bruce1992/p/14992994.html