gpt4 book ai didi

c# - 如何将方法名称传递给另一个方法并通过委托(delegate)变量调用它?

转载 作者:行者123 更新时间:2023-11-30 15:07:59 25 4
gpt4 key购买 nike

我有一个方法,其中包含一个指向另一个类的委托(delegate)变量。我想通过此委托(delegate)调用该类中的一个方法,但将该方法的名称作为字符串传递给包含该委托(delegate)的方法。

如何做到这一点?使用反射? Func<T>

编辑:

我现在明白反射可能不是最好的解决方案。

这是我的:

private static void MethodContainingDelegate(string methodNameInOtherClassAsString)
{
_listOfSub.ForEach(delegate(Callback callback)
{
//Here the first works, but I want the method to be general and
// therefore pass the method name as a string, not specfify it.
callback.MethodNameInOtherClass();
//This below is what I am trying to get to work.
callback.MethodNameInOtherClassAsString();
}
});
}

所以,基本上,我正在寻找一种方法让我的回调委托(delegate)“识别”我的 methodNameInOtherClassAsString 实际上是在另一个类中执行的方法。

谢谢!

最佳答案

很简单:

public delegate void DelegateTypeWithParam(object param);
public delegate void DelegateTypeWithoutParam();

public void MethodWithCallbackParam(DelegateTypeWithParam callback, DelegateTypeWithoutParam callback2)
{
callback(new object());
Console.WriteLine(callback.Method.Name);
callback2();
Console.WriteLine(callback2.Method.Name);
}

// must conform to the delegate spec
public void MethodWithParam(object param) { }
public void MethodWithoutParam() { }

public void PassCallback()
{
MethodWithCallbackParam(MethodWithParam, MethodWithoutParam);
}

没关系,委托(delegate)变量指向什么类。它可以在另一个类中定义——没有太大区别。

我认为您甚至可以在不进行反射的情况下从委托(delegate)变量本身查询原始方法的名称。每个委托(delegate)都有一个名为 Method 的属性,正是为此目的。

关于c# - 如何将方法名称传递给另一个方法并通过委托(delegate)变量调用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6069598/

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