gpt4 book ai didi

.net - 可以通过名称实例化和调用委托(delegate)吗?

转载 作者:行者123 更新时间:2023-12-02 18:15:29 24 4
gpt4 key购买 nike

我试图弄清楚是否可以通过名称而不是显式地实例化和调用委托(delegate)。我认为下面的代码很好地解释了它......我想接受一个函数名称,然后基于该名称实例化委托(delegate)。在示例中,我使用了 select case,但我想消除它并只使用 methodName 参数本身。

谨此……请避免告诉我这太疯狂了,我应该采取一些完全不同的方法来解决这个问题。 :)

    Private Delegate Sub myDelegate()  

Private Sub myDelegate_Implementation1()
'Some code
End Sub
Private Sub myDelegate_Implementation2()
'Some code
End Sub

Public Sub InvokeMethod(ByVal methodName As String)
Dim func As myDelegate = Nothing
'??? HOW TO GET RID OF THIS SELECT CASE BLOCK?:
Select Case methodName
Case "myDelegate_Implementation1"
func = AddressOf myDelegate_Implementation1
Case "myDelegate_Implementation2"
func = AddressOf myDelegate_Implementation2
End Select
func.Invoke()
End Sub

谢谢基思,这正是我正在寻找的。(BFree 的方法在大多数情况下都有效)。

这是 VB 中的工作代码:

Public Delegate Sub xxxDelegate()

Sub xxxAnImplementation()

End Sub

Sub zzzDoIt(ByVal xxxImplementerName As String)
Dim theDelegate As xxxDelegate = CType(System.Delegate.CreateDelegate(GetType(xxxDelegate), Me, xxxImplementerName), xxxDelegate)
theDelegate.Invoke()
End Sub

Private Sub LoadFunctions()
Dim thisClass As Type = Type.GetType(Me.GetType.BaseType.FullName.ToString)
For Each method As MethodInfo In thisClass.GetMethods(System.Reflection.BindingFlags.DeclaredOnly)
If 1 = 1 OrElse method.Name.Substring(0, 3) = "Get" Then
Me.ddlCodeSamples.Items.Add(method.Name)
End If
Next
End Sub

最佳答案

我不会完全回答问题,因为我不确定你所问的是否可能。不过,通过反射,可以调用给定方法名称的方法。 IE:

    string methodName = "MyMethod";
MethodInfo method = this.GetType().GetMethod(methodName);
method.Invoke(this, null);

关于.net - 可以通过名称实例化和调用委托(delegate)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/616018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com