我的目标是能够将一个方法作为参数传递,就像在javascript中回调一样,但不指定它的返回值或其函数签名。
例如在javascript中,我可以这样做:
function test(fn()){
fn();
}
JavaScript中的fn()可以解释为任何函数类型:
(函数参数重载是可能的......)
C#并没有为“Action”和“Func”提供太多帮助。
在C#中,我可以创建一个委托,然后指定委托的类型:
操作:返回void的函数的委托,Action将指向的所有函数,必须包含相同的确切签名(不酷...)
Func:一个函数的委托,它返回一个值,Func指向的所有函数都必须包含相同的精确签名(不酷......)
使用对象将带给我一个昂贵的拳击/拆箱故事,我想避免。
C#专家,跟我说说..答案 0 :(得分:2)
你称之为“不酷”,我称之为“类型安全”......
一种解决方案可能是您调用方法的方式。如果这是您要调用的方法:
public void Test(Action fn)
{
fn();
}
这是你要通过的那个:
public string MethodWithReturnType()
{
return "Hello World!";
}
然后,您可以使用lambda:
与Test
调用MethodWithReturnType
Test(() => MethodWithReturnType());
答案 1 :(得分:1)
你唯一真正的选择是对象函数(object []){}但正如你所说,解释对象的实际类型存在很大的问题。 C#是一种强类型语言,不像javascript,所以你想要的功能是不可能的,如果它们是,那么它们就不应该被使用,因为你将失去使用强类型语言的所有优点