C# GetMethod方法的应用实例讲解

 更新时间:2024年04月26日 09:42:01   作者:初九之潜龙勿用  
GetMethod 是获取当前 Type 的特定方法,具有多个重载, GetMethod 即使用指定的绑定约束搜索指定方法,本文给大家介绍了C# GetMethod方法的应用实例,需要的朋友可以参考下

关于 C# Type 类

Type表示类型声明:类类型、接口类型、数组类型、值类型、枚举类型、类型参数、泛型类型定义,以及开放或封闭构造的泛型类型。调用 this.GetType() 方法得到Type对象,可获取成员信息,如方法名、变量名。更多学习请参照以下链接:

https://learn.microsoft.com

本文以 API 模拟调用类应用实例介绍 Type.GetMethod 方法的实际应用。

GetMethod 方法应用

GetMethod 是获取当前 Type 的特定方法,具有多个重载,我们在这里介绍 GetMethod (string name, System.Reflection.BindingFlags bindingAttr)  即使用指定的绑定约束搜索指定方法。

其中 string name 表示要搜索的方法名称,System.Reflection.BindingFlags 枚举可见下表:

序号筛选器标志说明
1BindingFlags.Instance 或 BindingFlags.Static 必须指定实例或静态方可有效返回
2BindingFlags.Public搜索当前 Type 中包含的公共方法
3BindingFlags.NonPublic搜索当前 Type 中包含的非公共方法 、私有方法、内部方法和保护方法
4BindingFlags.FlattenHierarchy在层次结构中的包括 public 和 protected 静态成员; private 继承类中的静态成员不包括在层次结构中
5BindingFlags.IgnoreCase忽略方法name的大小写进行搜索
6BindingFlags.DeclaredOnly如果只搜索 Type 声明的方法,则搜索只是继承的方法

应用举例

类设计

创建一个 CCAPI 类处理数据回应,该类设计如下:

序号成员类型说明
1HttpContext httpc = HttpContext.Current;属性System.Web.HttpContext,相当于被包装组合的网络请求,我们可以通过 HttpContext 访问诸如网络传递GET或POST提交的数据、文件等等
2void init()方法处理请求,执行对应的接口功能并返回Json结果
3string RunGetTypeMethod(string methodName, object[] paras)方法GetMethod 方法的应用,根据请求动作执行对应的方法

运行的基本流程如下图:

用户通过访问API地址,携带getType参数,参数值跟方法名称,后台 init() 方法通过 HttpContext.Current进行请求处理,执行 RunGetTypeMethod("methodA", null) 方法,查找 API 列表库中对应的方法名称 "methodA" ,并执行 string methodA() 方法,该方法返回 Json 处理结果。

类代码

示例代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Data;
using System.Web.SessionState;
using System.Collections;
using System.Data.SqlClient;
using System.IO;
using System.Reflection;
namespace CCAPI
{
    public class CCAPI
    {
        public HttpContext httpc = HttpContext.Current;
        
        public CCAPI()
        {
        }
        public void init()
        {
            string getType = httpc.Request["getType"];
            if (getType == null)
            {
                httpc.Response.Write("{\"errcode\":2,\"errmsg\":\"暂时不能提供服务,未提供合法getType值。\"}");
                httpc.Response.End();
                return;
            }
            string resultJson = "";
            resultJson = RunGetTypeMethod(getType, null);
            httpc.Response.Write(resultJson);
       }
       string methodA()
        {
            string result = "{\"errcode\":{0},\"errmsg\":\"methodA\"}";
            return result;
        }
       string methodB()
        {
            string result = "{\"errcode\":{0},\"errmsg\":\"methodB\"}";
            return result;
        }
       string methodC()
        {
            string result = "{\"errcode\":{0},\"errmsg\":\"methodC\"}";
            return result;
        }
        public string RunGetTypeMethod(string methodName, object[] paras)
        {
            string result = "";
            Type pageType = this.GetType();
            MethodInfo mInfo = pageType.GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance);
            if (mInfo != null)
            {
                result = "{\"errcode\":2,\"errmsg\":\"方法存在,但无法返回任何值。\"}";
                object user_rv = mInfo.Invoke(this, paras);
                if (mInfo.ReturnType != typeof(void))
                    if (user_rv.GetType() == typeof(string)) result = (string)user_rv;
            }
            else
            {
                result = "{\"errcode\":2,\"errmsg\":\"getType不是合法的API访问功能值\"}";
            }
            return result;
        }
 
    }
}

RunGetTypeMethod 核心方法其参数说明如下:

序号参数类型说明
1methodNamestring要查找的字符串方法名称
2object[] parasobject[]可传递方法要使用的参数列表,本应用里传递了 null 值。

其调用结构如下图:

调用 GetMethod 得到 MethodInfo 对象,然后 MethodInfo 再执行 Invoke 方法执行实例操作。

小结

到此这篇关于C# GetMethod方法的应用实例讲解的文章就介绍到这了,更多相关C# GetMethod方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#中+=是什么意思及+=的用法

    C#中+=是什么意思及+=的用法

    这篇文章主要介绍了C#中+=是什么意思及+=的用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • C#开发Winform控件之打开文件对话框OpenFileDialog类

    C#开发Winform控件之打开文件对话框OpenFileDialog类

    这篇文章介绍了C#开发Winform控件之打开文件对话框OpenFileDialog类,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-02-02
  • C# 使用BitBlt进行窗口抓图的示例

    C# 使用BitBlt进行窗口抓图的示例

    这篇文章主要介绍了C# 使用BitBlt进行窗口抓图的示例,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2021-01-01
  • C# #define条件编译详解

    C# #define条件编译详解

    这篇文章主要介绍了C# #define条件编译,告诉大家#define是用来做什么?如何使用#define,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • C# 中Func 的用法小结

    C# 中Func 的用法小结

    本文主要介绍了C#中Func的用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-11-11
  • C#使用FolderBrowserDialog类实现选择打开文件夹方法详解

    C#使用FolderBrowserDialog类实现选择打开文件夹方法详解

    这篇文章主要介绍了C#选择文件夹/打开文件夹/浏览文件夹等代码方法,大家参考使用
    2013-11-11
  • C#中lock用法详解

    C#中lock用法详解

    这篇文章主要介绍了C#中lock用法,以实例形式详细分析了lock语句的用法及用途,需要的朋友可以参考下
    2014-11-11
  • C#将图片存放到SQL SERVER数据库中的方法

    C#将图片存放到SQL SERVER数据库中的方法

    这篇文章主要介绍了C#将图片存放到SQL SERVER数据库中的方法,以实例形式较为详细的分析了C#保存图片到SQL Server数据库的具体步骤与相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • c# 如何用组合替代继承

    c# 如何用组合替代继承

    这篇文章主要介绍了c# 如何用组合替代继承,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-02-02
  • 基于WPF实现ListBox拖动子项

    基于WPF实现ListBox拖动子项

    这篇文章主要为大家详细介绍了如何基于WPF实现ListBox拖动子项效果,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考下
    2024-04-04

最新评论