有谁知道如何为Func和Action指针声明源代码?我试图理解使用委托进行异步调用的理论以及它与线程的关系。
例如,如果我有以下代码:
static void Main()
{
Func<string, int> method = Work;
IAsyncResult cookie = method.BeginInvoke ("test", null, null);
//
// ... here's where we can do other work in parallel...
//
int result = method.EndInvoke (cookie);
Console.WriteLine ("String length is: " + result);
}
static int Work (string s) { return s.Length; }
我如何使用'委托'类型来替换Func&lt;&gt;结构体;我想弄明白的原因是因为Func只能输入一个输入和一个返回变量。它不允许设计灵活性指向它。
谢谢!
答案 0 :(得分:5)
Func<T>
真的没什么特别的。这很简单:
public delegate T Func<T>();
事实上,为了支持不同数量的参数,有一些声明,如:
public delegate void Action();
public delegate void Action<T>(T arg);
public delegate U Func<T, U>(T arg);
// so on...
答案 1 :(得分:2)
Func<int, string>
只是一个通用委托。它只是帮助您避免编写常见代理。而已。如果它不合适你应该写自己的delagate。
delagate替换你要问的是
delegate string Method(int parm);
如果你想要一个func(对于istance)需要22 :-) integer并返回一个字符串你必须写自己的委托
delegate string CrazyMethod(int parm1,int parm2,.....)
在你的情况下
delegate int MyOwnDeletage(string d);
class Program
{
static int Work(string s) { return s.Length; }
static void Main(string[] args)
{
// Func<string, int> method = Work;
MyOwnDeletage method =Work;
IAsyncResult cookie = method.BeginInvoke ("test", null, null);
//
// ... here's where we can do other work in parallel...
//
int result = method.EndInvoke (cookie);
Console.WriteLine ("String length is: " + result);
}
}