我试图了解代表的演变。与理解它之前发生的事情相比,如何更好地理解这一点?我知道委托的概念来自 C++ 中的函数指针。
1. 引入函数指针的主要原因是什么?是不是支持多线程?
Henk Holterman:委托/函数指针的存在是为了提供一定程度的灵活性。方法的选择可以与其调用分离。
在查看这个出色的线程资源时,我被介绍给了代表
http://www.albahari.com/threading/
这就是 Joe Albahari 对异步委托的看法:
ThreadPool.QueueUserWorkItem
没有提供一种简单的机制来在线程完成执行后从线程取回返回值。异步委托调用(简称异步委托)解决了这个问题,允许双向传递任意数量的类型化参数。此外,异步委托上的未处理异常可以方便地在原始线程(或更准确地说,调用 的线程EndInvoke
)上重新抛出,因此它们不需要显式处理。
*2。所有代表本质上都是异步的吗?
Jon:委托是一个指向代码的指针。它本质上不是同步或异步的;调用它的方式和返回的结果决定了这一点。
Henk Holterman:当你有一个委托实例 f 你可以同步调用 f() 或者你可以调用异步 f.BeginInvoke()
- 除了事件之外,异步委托还有其他用途吗?
dasblinkenlight:委托在异步 API 中有很多用途,例如.NET 异步 I/O。
- C# 中的委托/线程支持在各个版本中是如何演变的?
*
dasblinkenlight : 对委托的核心支持保持不变,但该语言添加了许多重要的特性,以便更方便地定义委托。
C# 2.0:引入匿名委托
C# 3.5:添加了 lambda 表达式
C# 4.0:添加了任务并行库。
编辑:我在这里的大部分查询都已得到澄清。如果我能获得代表的“历史”并为他们提供更实际的用法,那就太好了!