我不明白为什么我们需要使用委托?
我知道它们是持有方法引用的不可变引用类型,但为什么我们不能直接调用方法而非通过委托来调用呢?
谢谢。
谢谢。
Enumerable.Select
无法知道您想使用哪个投影。
- Button
的作者不知道用户在单击按钮时想要执行什么操作。
- 如果新线程只做一件事情,那将会很无聊...当然,您可以直接在对象上调用方法,但考虑以下情况:
Select
方法提供很多实现。想一想C/C++函数指针,以及如何将javascript事件处理函数视为“数据”并传递它们。在Delphi语言中也有过程类型。 在幕后,C#代理和lambda表达式,以及所有这些东西本质上都是相同的思想:代码作为数据。这构成了函数式编程的基础。
_cacher.GetFromCache(delegate { return ListResults(); }, "ListResults");
public IEnumerable<T> GetFromCache(MethodForCache item, string key, int minutesToCache = 5)
{
var cache = _cacheProvider.GetCachedItem(key);
//you could even have a UseCache bool here for central control
if (cache == null)
{
//you could put timings, logging etc. here instead of all over your code
cache = item.Invoke();
_cacheProvider.AddCachedItem(cache, key, minutesToCache);
}
return cache;
}
你可以将它们视为类似于C/C++中函数指针的构造。但在C#中,它们不仅如此。详情。