【发布时间】:2016-12-17 21:05:48
【问题描述】:
我的目标是能够像 javascript 中的回调一样将方法作为参数传递,但无需指定它的返回值或其函数签名。
例如在 javascript 中我可以这样做:
function test(fn()){
fn();
}
JavaScript 中的 fn() 可以解释为任何函数类型:
- 函数[返回值] test(){}
- 函数 [void] test(){}
- 函数 [...] (arg1,arg2...){}
(函数参数重载是可能的...)
C# 并没有为我提供太多的“Action”和“Func”。
在 C# 中,我可以创建一个委托,然后指定它的委托类型:
Action:返回 void 的函数的委托,Action 将指向的所有函数都必须包含完全相同的签名(不酷...)
Func:返回值的函数的委托,Func 将指向的所有函数都必须包含完全相同的签名(不酷...)
使用对象会让我陷入昂贵的装箱/拆箱故事,我想避免这种情况。
C# 专家,跟我聊聊..
【问题讨论】:
-
我猜答案是“C# 不是 JavaScript”——C# 不是一种动态类型的脚本语言,所以不要尝试将它作为一种语言来使用。
-
使用一个对象会带我进入一个昂贵的装箱/拆箱故事:错误。使用 Object 可能会迫使您将对象转换为更具体的对象。铸造和拳击是两个完全不同的学科
-
您要解决的问题是什么?我的意思是,一旦你在你的方法中获得了委托,你打算如何调用它?
-
另外,如果你不想传入函数签名,你希望如何调用
fn()?例如。我可以传入函数void f(int, int, bool, string)。您的意思是要保持只是未指定返回值吗? -
保持返回值和函数签名未指定
标签: c#