我编写了很多语言代码:Java
,PHP
,C#
,JQuery
仅举几例,但我只是公平到中等< / em>在C#中,我对如何使用匿名函数感到困惑。我看过很多关于Action<T>
,lambda
和delegates
的引用,但我不确定它们是什么以及它们如何重要:
我(但是)非常习惯JQuery,它就像这样:
function hello(fnc){
console.log("Hello");
if (typeof fnc === "function") fnc();
}
hello(); //prints "Hello"
hello(function () {console.log("World"); }); //prints "Hello\nWorld"
现在,我以此为例:我怎么能这样做C#
我也很好奇classes
EG会发生什么:
class foo
{
public void action()
{
Debug.WriteLine("Hello");
}
public void action(Delegate fnc)
{
action();
control.Invoke((MethodInvoker)fnc);
}
}
foo FOO = new foo();
FOO.action(); //prints "Hello"
FOO.action(() => { //prints "Hello\nWorld"
Debug.WriteLine("World");
});
所以我的问题是a)这项工作/我是否关闭(我无法检查我是不是在工作PC atm)和b)如何传递参数(即范围问题):
foo FOO = new foo();
string yay = "Yeah";
FOO.action(() => { //prints "Hello\nWorldYeah"
Debug.WriteLine("World" + yay);
});
修改
答案 0 :(得分:2)
class foo
{
public void action()
{
Debug.WriteLine("Hello");
}
public void action(Action fnc)
{
action();
fnc();
}
}
并称之为
foo FOO = new foo();
FOO.action(); //prints "Hello"
FOO.action((Action)(() =>
{ //prints "Hello\nWorld"
Debug.WriteLine("World");
}));
string yay = "Yeah";
FOO.action((Action)(() =>
{ //prints "Hello\nWorldYeah" - this will indeed still print "Yeah"
Debug.WriteLine("World" + yay);
}));
使用此技术,您可以将匿名回调函数发送到c#方法