【问题标题】:How do you dynamically get a particular method's name in a strongly typed way?如何以强类型的方式动态获取特定方法的名称?
【发布时间】:2009-04-07 02:06:37
【问题描述】:

我有点不确定如何写这个问题的标题,但我正在寻找 VB.NET(或 C#,但目前使用 VB.NET)中最短/最简单的方法来获取字符串值给定方法调用动态的方法名称。

例如,我有一个这样的类:

Public Class Blah
    Public Sub Foo()
    End Sub
End Class

现在 Foo 是动态设置的强类型封面,我有一个事件处理程序,当设置更改时将触发并返回更改设置的字符串名称。

我希望能够在这个字符串上切换/选择,并有一个基于 Foo() 方法的案例。为此,我需要能够从方法调用本身获取 Foo 方法的字符串名称(即不知何故 GetMethodName(blahInstance.Foo()))。

【问题讨论】:

    标签: c# vb.net reflection


    【解决方案1】:

    我目前没有 VB.NET,但在 C# 中,我认为这就是答案。这看起来是否像您正在寻找的一样?如果是这样,VB.NET 的语法应该比较容易解决:

         Blah blahInstance = new Blah();
         System.Action fooFunc = blahInstance.Foo;
         Console.WriteLine(fooFunc.Method.Name);
    

    【讨论】:

    • 我在 beta 1 之前就一直在使用 .NET,而且我相信我从未见过使用过 System.Delegate.Method。感谢我今天的“新事物”。
    • OTOH,打开方法名称听起来像一个真的坏主意,所以也许你应该把答案留给自己。 ;-)
    • 嗯,这似乎比打开字符串设置名称更好,因为它是强类型 no?
    • 嗯,您的示例非常适合我的示例,但是由于我目前坚持使用 .NET 2.0,因此我认为我无法访问 Func,因此我无法处理具有以这种方式返回类型(Action 用于无返回类型)。如果我遗漏了什么,有什么想法吗?
    • @John Saunders 我猜你是对的 - 正确的方法可能是每个设置字段的新类类型,但这似乎有点矫枉过正。
    猜你喜欢
    • 1970-01-01
    • 2012-03-13
    • 2015-11-25
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    • 2011-09-15
    相关资源
    最近更新 更多