方法或属性,怎么在自己的内部获取自己的“名称”

xloveme 2014-02-03 03:05:44
private void MethodTest()
{
//这里怎么通过代码获得自己的名称为“MethodTest”呢?
}



方法或属性,怎么在自己的内部获取自己的“名称”
...全文
410 25 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
xloveme 2014-02-05
  • 打赏
  • 举报
回复
sp1234 谢谢你的谆谆善导。 其实这里并不是说盲目的挑战,只是觉得广泛使用的方法很有问题,而思考一下有没有办法能够弥补这种问题而已。 我主题中的需求,其中一方面就是应用到 MVVM 中的 RaisePropertyChanged 。 可能不止我一个人,很多人都发现了,直接提供字符串的方式,是很有问题的。 假如你需要修改这个属性名,你就不可能保证每次都还记得再来改 RaisePropertyChanged 这里了,尤其是这个属性里面代码量又相对较大的话, 像我这样的码农,头脑一天又迷迷糊糊的,很容易就忘记了。
  • 打赏
  • 举报
回复
我们自然要理解.net的原生的设计闺房,胡乱“挑战”最初级的东西,是幼稚的表现。 有些人说“为什么不能输入一个字符串、然后执行字符串”? 其实没有什么是永远“不能”的,关键是针对当时的情况,发现你根本提不出有用的说明而是在不顾基础地在搞颠覆,因此支持你就等于害了其它初学者。
  • 打赏
  • 举报
回复
如果你需要某种自然而然地设计模式,那么你应该设计你的模式。你不应该到筷子、勺子里边去找美味,你应该自己做。 你应该自己去改变编译器,改变预处理过程,或者真正加入你所谓的“方法和属性”的新的规范。 如果你先把“方法或属性”说成了不是.net原生的东西,然后再去问它们为什么不是你所谓的“动态语言”的另类语法,这就证明了你没有设计你自己的那种“方法或属性”的知识,一切全靠人家赐予。
xwj 2014-02-05
  • 打赏
  • 举报
回复
学习力,谢谢!
xloveme 2014-02-05
  • 打赏
  • 举报
回复
引用 18 楼 wyd1520 的回复:
static void a2() { StackFrame frame = new StackFrame(1); //偏移一个函数位,也即是获取当前函数的前一个调用函数 MethodBase method = frame.GetMethod(); //取得调用函数 Console.WriteLine(method.Name); //a1 } static void a1() { a2(); } 直接 static void a1() { string aa = MethodBase.GetCurrentMethod().Name; Console.WriteLine(aa); }
太感谢了,这方法是既简单又管用。 不过,“属性”怎么办呢? 好像没有 PropertyBase 这么个东西
李刀飞 2014-02-05
  • 打赏
  • 举报
回复
有难度啊,牛人
本拉灯 2014-02-05
  • 打赏
  • 举报
回复
引用 20 楼 xloveme 的回复:
[quote=引用 18 楼 wyd1520 的回复:] static void a2() { StackFrame frame = new StackFrame(1); //偏移一个函数位,也即是获取当前函数的前一个调用函数 MethodBase method = frame.GetMethod(); //取得调用函数 Console.WriteLine(method.Name); //a1 } static void a1() { a2(); } 直接 static void a1() { string aa = MethodBase.GetCurrentMethod().Name; Console.WriteLine(aa); }
太感谢了,这方法是既简单又管用。 不过,“属性”怎么办呢? 好像没有 PropertyBase 这么个东西[/quote] 属性也是可以用的,属性IL编译器也是编译成Method的 最后结果会变成set_xxx get_xxx
本拉灯 2014-02-04
  • 打赏
  • 举报
回复
static void a2() { StackFrame frame = new StackFrame(1); //偏移一个函数位,也即是获取当前函数的前一个调用函数 MethodBase method = frame.GetMethod(); //取得调用函数 Console.WriteLine(method.Name); //a1 } static void a1() { a2(); } 直接 static void a1() { string aa = MethodBase.GetCurrentMethod().Name; Console.WriteLine(aa); }
wanghui0380 2014-02-04
  • 打赏
  • 举报
回复
string methodname=xxx.getMehodName(p=>p.xxxMehodName()) 呵呵,有关这个喝醉酒滴写法,请google“博客园 高级 mvvm”,那些喝了比较高端洋酒而且已经有点晕乎滴人滴人,会跟你你说这说是多么带劲滴1870年滴波尔多洋酒是多么多么高端大气上档次滴 额,随手在博客园找了一篇这中高端大气上档次滴洋酒看看把 http://www.cnblogs.com/wywnet/p/3503778.html 虽然是说属性,不过结果一样,人家要滴是属性名,你要滴方法名,不过手法完全一样,这酒你是愿意喝还是愿意喝,就随便你自己了
wanghui0380 2014-02-04
  • 打赏
  • 举报
回复
额,我想问一下你的使用环境 如果正常环境,写代码滴人难道不知道自己写滴是那个方法么?? 哪怕他是接口,哪怕他是override,这个写方法滴不知道自己写滴到底是什么方法?? 当然我说滴是写这方法滴是清醒滴,没有喝醉酒!你滴项目经理是清醒滴,没有喝醉酒 如果你告诉我他们都喝醉酒了,那么我无话可说 ps;如果都没喝醉酒,他们写滴人理所应当知道自己写滴是什么,当然想某些思维比较接近醉酒滴喜欢说,如果重构方法名如何如何滴,我说好罢我败了,你按cao版滴方法来 string methodname=xxx.getMehodName(p=>p.xxxMehodName()) 重构了编译器会告诉你,对不起你喝醉了,p class里面不包含xxxmehodName这个方法签名
  • 打赏
  • 举报
回复
楼主其实不需要在这里研究什么。 这只是编程规范的范畴。
xloveme 2014-02-04
  • 打赏
  • 举报
回复
果然是没有可靠的办法呀
threenewbee 2014-02-03
  • 打赏
  • 举报
回复
引用 12 楼 tcmakebest 的回复:
So Easy:
public static string MethodTest()
{
    return GetExecuteMethod();
}
public static string GetExecuteMethod()
{
    StackFrame[] stacks = new StackTrace().GetFrames();
    return stacks[1].GetMethod().Name;
}
这个方法并不可靠,因为CLR可能会内联方法,导致无法获取方法名。 尤其是属性。考虑到内联的存在,lz的需求根本就是无法实现的。
tcmakebest 2014-02-03
  • 打赏
  • 举报
回复
So Easy:
public static string MethodTest()
{
    return GetExecuteMethod();
}
public static string GetExecuteMethod()
{
    StackFrame[] stacks = new StackTrace().GetFrames();
    return stacks[1].GetMethod().Name;
}
  • 打赏
  • 举报
回复
引用 7 楼 xloveme 的回复:
[quote=引用 5 楼 wind_cloud2011 的回复:] http://www.360doc.com/content/11/1014/09/1007797_156048572.shtml
还是同上,获取方法和属性的列表不难,难就难在对应的方法和属性中,怎样判断哪一个才是“自己”[/quote] 很简单,你把微软买下来,然后让他们开发的vs系统Release编译程序时,为每一行代码都写一个调试信息,这样就能增加一个这种方法可调用了。 尽管你的程序慢了1000倍,但是“达到了你们领导的需求了”。哈哈。
  • 打赏
  • 举报
回复
引用 8 楼 u011470163 的回复:
小白的看法 事先把方法和属性名存储一个集合或数组,定义一个字段记录下标,方法里改变下标值。 下标是多少,就获取哪个
方法里改变下标值,那不不如直接返回名字。
  • 打赏
  • 举报
回复
引用 3 楼 xloveme 的回复:
所言甚是,这样确实简单。不过现在的需求就是不能直接写,需要自己获取自己的名称,这下可犯愁了。
谁提出的需求呢? 让我们再笑一下。
Start2014 2014-02-03
  • 打赏
  • 举报
回复
小白的看法 事先把方法和属性名存储一个集合或数组,定义一个字段记录下标,方法里改变下标值。 下标是多少,就获取哪个
xloveme 2014-02-03
  • 打赏
  • 举报
回复
引用 5 楼 wind_cloud2011 的回复:
http://www.360doc.com/content/11/1014/09/1007797_156048572.shtml
还是同上,获取方法和属性的列表不难,难就难在对应的方法和属性中,怎样判断哪一个才是“自己”
xloveme 2014-02-03
  • 打赏
  • 举报
回复
引用 4 楼 hudsonhuang 的回复:
typeof(this)然后在看看typeinfo的成员吧
这个方法获取的是“整体的”,没有办法区分哪个是“自己的”
加载更多回复(5)

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧