MethodBase.GetCurrentMethod 方法
如果当前正在执行的方法定义泛型类型上MethodInfo返回GetCurrentMethod通过泛型类型定义 (即,MethodInfo.ContainsGenericParameters返回true)。 因此,它不反映时调用该方法时所使用的类型自变量。 例如,如果方法M()泛型类型上定义C<T>(C(Of T)在 Visual Basic 中),和GetCurrentMethod从调用C<string>.M(),然后GetCurrentMethod返回C<T>.M()(C(Of T).M()在 Visual Basic 中)。
如果当前正在执行的方法是泛型方法,GetCurrentMethod返回泛型方法定义。 如果在泛型类型上定义的泛型方法MethodInfo从泛型类型定义中获取。
下面的示例定义两种类型。 第一种是一个非泛型类, TestClass,包括构造函数,一个名为方法GetValue,和一个名为的读写属性GetValue。 第二个是名为一个泛型类TestClass<T>,包含一个构造函数,GetValue方法和泛型方法, ConvertValue<Y>。 每个构造函数、 方法和属性访问器包括对的调用GetCurrentMethod方法。
------------------------------------------------------
using System; using System.Reflection;public class Example {public static void Main(){var t = new TestClass(); Console.WriteLine(t.GetValue());t.Value = 10;Console.WriteLine(t.Value);Console.WriteLine();var tg =new Test<int>(200);Console.WriteLine(tg.GetValue());var b = tg.ConvertValue<Byte>();Console.WriteLine("{0} -> {1} ({2})", tg.GetValue().GetType().Name,b, b.GetType().Name);} } public class TestClass {private Nullable<int> _value;public TestClass(){MethodBase m = MethodBase.GetCurrentMethod();Console.WriteLine("Executing {0}.{1}", m.ReflectedType.Name, m.Name);}public TestClass(int value){MethodBase m = MethodBase.GetCurrentMethod();Console.WriteLine("Executing {0}.{1}", m.ReflectedType.Name, m.Name);_value = value;}public int Value{ get {MethodBase m = MethodBase.GetCurrentMethod();Console.WriteLine("Executing {0}.{1}", m.ReflectedType.Name, m.Name);return _value.GetValueOrDefault();}set {MethodBase m = MethodBase.GetCurrentMethod();Console.WriteLine("Executing {0}.{1}", m.ReflectedType.Name, m.Name);_value = value;}}public int GetValue(){MethodBase m = MethodBase.GetCurrentMethod();Console.WriteLine("Executing {0}.{1}", m.ReflectedType.Name, m.Name);return this.Value;} }public class Test<T> {private T value;public Test(T value){MethodBase m = MethodBase.GetCurrentMethod();Console.WriteLine("Executing {0}.{1}", m.ReflectedType.Name, m.Name);this.value = value;}public T GetValue(){MethodBase m = MethodBase.GetCurrentMethod();Console.WriteLine("Executing {0}.{1}", m.ReflectedType.Name, m.Name);return value;}public Y ConvertValue<Y>() {MethodBase m = MethodBase.GetCurrentMethod();Console.WriteLine("Executing {0}.{1}", m.ReflectedType.Name, m.Name);Console.Write(" Generic method: {0}, definition: {1}, Args: ", m.IsGenericMethod, m.IsGenericMethodDefinition);if (m.IsGenericMethod) {foreach (var arg in m.GetGenericArguments())Console.Write("{0} ", arg.Name);}Console.WriteLine();try {return (Y) Convert.ChangeType(value, typeof(Y));}catch (OverflowException) {throw; } catch (InvalidCastException) {throw;} } } // The example displays the following output: // Executing TestClass..ctor // Executing TestClass.GetValue // Executing TestClass.get_Value // 0 // Executing TestClass.set_Value // Executing TestClass.get_Value // 10 // // Executing Test`1..ctor // Executing Test`1.GetValue // 200 // Executing Test`1.ConvertValue // Generic method: True, definition: True, Args: Y // Executing Test`1.GetValue // Int32 -> 200 (Byte)
转载于:https://www.cnblogs.com/herizai/p/6972201.html
MethodBase.GetCurrentMethod 方法相关推荐
- 如何从代码中获取当前方法的名称[复制]
本文翻译自:How to get the name of the current method from code [duplicate] This question already has an a ...
- 如何找到调用当前方法的方法?
登录C#时,如何得知调用当前方法的方法的名称? 我知道有关System.Reflection.MethodBase.GetCurrentMethod()全部知识,但是我想在堆栈跟踪中比这低一级. 我已 ...
- c# 获取方法所在的命名空间 类名 方法名
平时我们在记录日志的时候难免会需要直接记录当前方法的路径,以便查找,但是每次都输入方法名称非常的繁琐,同时如果修改了方法名称也要去手动修改日志内容,真的是劳命伤财啊,所以有了如下方法则可解决我们的大难 ...
- c#中中读取嵌入和使用资源文件的方法
Dotnet中嵌入资源(位图.图标或光标等)有两种方式,一是直接把资源文件加入到项目,作为嵌入资源,在代码中通过Assembly的GetManifestResourceStream方法获取资源的Str ...
- Linq to Oracle 使用教程(七)将数据库的存储过程映射到方法
点击这里返回目录 双击 GET_CATEGORIES_AND_PRODUCTS 存储过程,代码如下: 代码 PACKAGE BODY PKG3 IS PROCEDURE GET_CATEGORIES_ ...
- 获取到某一方法的调用者的类名、方法名、命名空间
1.返回当前方法所在的类名: using System.Reflection; string className = MethodBase.GetCurrentMethod().ReflectedTy ...
- log4net使用方法
项目利用log4net来记录日志. 一.引入log4net 项目中引入log4net可以通过nuget引入,这种方式还是比较方便简单的,而且不用害怕某天log4net的程序集误删除. 二.配置log4 ...
- C# 打开Excel文件方法
一.C#怎样打开Excel文件 1.右键–Add DevExpress Item – New Item,新建一个Form窗体 2.打开工具箱,搜索spreadsheetControl 3.将工具spr ...
- Winform开发的界面处理优化
在Winform开发中,客户体验是个很好的参考性指标,如果一个功能使用的时候感觉很流畅,说明我们的程序执行效率还不错,但是随着数据的真多,原先可能流程的地方可能会变得比较卡,这时候就需要追本索源,找到 ...
最新文章
- ffmpeg为AVPacket添加解码头信息
- vmware安装linux不能和主机互通,Ubuntu18.04系统主机与虚拟机互通问题的解决方法...
- python:SyntaxError: invalid syntax报错
- “网页内容无法访问”可能是跨域错误!
- 牛客网-数据结构笔试题目(二)-万万没想到之抓捕孔连顺思路解析(附源码)
- 企业实战——Ansible自动化运维基础知识
- ie8和ie11的html代码生成,ie8升级ie11-IE11,IE8
- java操作html和word生成pdf,可生成目录和表格
- SHT30温湿度传感器工作原理
- 易班显示不能连接到服务器检查网络,网络思政教育 “易班网”不一般
- 数码照片像素与可冲印照片尺寸对照表
- Gyro-3电子陀螺二次开发
- gmail邮箱注册软件_前5名:Gmail的替代品,当今的免费软件基金会等
- bitcoin简析一
- 金融行情尽在掌握 — Google(谷歌)推出谷歌金融 Onebox
- JGG | 河北大学杜会龙组综述植物泛基因组学研究
- win10下shell入门学习(一)
- 啪啪三国2获取服务器信息,啪啪三国2海量资源获取途径攻略
- 车载监控4大趋势,TSINGSEE助力车载视频监控高清、智能化发展
- python实战演练_《Python高效开发实战》实战演练——基本视图3
热门文章
- console用法java_使用console对javaScirpt进行全面调试-全面分析console用法
- 一致性代码段和非一致性代码段【转】
- WPF-常用布局容器
- POJ 2186 popular cow 有向图的强联通问题 Tarjan算法
- 不用 IDE 手工创建、开发、编译、安装 Android 应用程
- MySQL笔记1:考察内链接、左连接、右连接。
- java之filter原理与责任链模式
- iview default-file-list 动态赋值不显示
- 记录奥林比克/课程录制 洛谷P2255 [USACO14JAN]
- IOS开发笔记(Swift):UITableView表格视图的静态使用