利用特性区分查找方法,并通过反射调用方法

如示例代码,buf带描述标记

/// <summary>
/// 分析 数据
/// </summary>
/// <param name="buf"></param>
public void AnalysisDatabuf(string buf)
{
if (string.IsNullOrEmpty(buf))
return;

try
{
string optNo = buf.Substring(0, 5);
string description = string.Empty;

DescriptionAttribute descriptionAttribute = null;

//获取方法集
MethodInfo[] methodInfos = this.GetType().GetMethods();

//根据特性找方法
foreach (var v in methodInfos)
{
object[] customAttributes = v.GetCustomAttributes(false);
if (null != customAttributes && customAttributes.Length > 0)
{
descriptionAttribute = customAttributes[0] as DescriptionAttribute;
if (null == descriptionAttribute)
continue;

description = descriptionAttribute.Description;

//找到方法后,调用方法
if (description.ToUpper() == optNo.ToUpper())
{
v.Invoke(this, new object[] { buf });
break;
}
}
}
}
catch (Exception ex)
{
string methodName = System.Reflection.MethodInfo.GetCurrentMethod().Name;
string errStr = string.Format("错误源:{3}\r\n类名:{0} 函数:{1} 错误描述:{2}", this.GetType().Name, methodName, ex.Message, ex.Source);
LogService.Instance.Fatal("执行函数异常!", errStr);
return;
}

}

被调用到的方法

  [Description("43112")]
        public void ReceiveBdGztzJqList(string buf)
        {

        }

原文地址:https://www.cnblogs.com/KQNLL/p/9275299.html

时间: 2024-11-04 08:28:50

利用特性区分查找方法,并通过反射调用方法的相关文章

反射学习(三)--------利用反射调用方法

利用反射调用方法 C1 newC1Instance = new C1(); var funM = newC1Instance.GetType().GetMethod("fun", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); object[] para = { }; if (funM == null) { Console.Write("error, fu

java反射调用方法

1:Class类中的方法 public Method getDeclaredMethod(String name, Class<?>... parameterTypes) throws NoSuchMethodException, SecurityException 参数: name - 方法名 parameterTypes - 参数数组 返回: 该类与指定名和参数相匹配的方法的 Method 对象 2:Method类中的方法; public Object invoke(Object obj,

跟王老师学反射(六):使用反射调用方法

跟王老师学反射(六):使用反射调用方法 主讲教师:王少华   QQ群号:483773664 学习内容 使用反射调用方法 当获得某个类对应的Class对象后,就可以通过该Class对象的getMethods()方法或getMethod()方法来获取全部方法或指定方法,这二个方法的返回值是Method对象数组,或者Method对象. 一.public Objectinvoke(Object obj,  Object... args) 获得Method对象后,程序就可以通过该Method来调用对应的方

原 .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)

大家都说反射耗性能,但是到底有多耗性能,哪些反射方法更耗性能:这些问题却没有统一的描述. 本文将用数据说明反射各个方法和替代方法的性能差异,并提供一些反射代码的编写建议.为了解决反射的性能问题,你可以遵循本文采用的各种方案. 本文内容 反射各方法的性能数据 反射的高性能开发建议 创建类型的实例 反射获取 Attribute 反射调用公共 / 私有方法 使用预编译框架 附本文性能测试所用的代码 所有反射相关方法 IsDefined 和 GetCustomAttribute 的专项比较 参考资料 反

aspx反射调用方法

string name = base.Request["action"]; object obj2 = base.GetType().InvokeMember(name, BindingFlags.InvokeMethod, null, this, new object[0]); if (obj2 != null) { s = obj2.ToString(); } 传入方法名即可调用方法 原文地址:https://www.cnblogs.com/codeDevotee/p/113307

Java反射(三)利用反射调用方法

有Student类: package testreflection; public class Student{ private static int count; private String stuNum; public Student(String stuNum) { // TODO Auto-generated constructor stub this.stuNum = stuNum; count++; } public String getStuNum() { return stuN

java对过反射调用方法

  public class InvokeTester { public InvokeTester() { } String str; public InvokeTester(String str) { this.str = str; } public int add(int param1, int param2) { return param1 + param2; } public String echo(String msg) { return "echo: " + msg; }

C#通过反射获取类中的方法和参数个数,反射调用方法带参数

using System; using System.Reflection; namespace ConsoleApp2 { class Program { static void Main(string[] args) { //反射获取 命名空间+类名 string className = "ConsoleApp2.ClassSample"; string methodName = "test1"; //传递参数 Object[] paras = new Obje

C#如何通过反射调用类下的方法

首先模拟一个mvc的项目,创建一个业务类(HomeService),在类下创建3个方法 public class HomeService { /// <summary> /// 无参方法 /// </summary> /// <returns></returns> public string SayHello() { string str = "你好!"; return str; } /// <summary> /// 有参方