摘要: 在.NET 3.5的System命名空间中,有5个泛型Func委托类型。Func并无特别之处,只是它提供了一些好用的预定义泛型类型,在很多情况下能帮我们处理问题。最后一个类型用作每种情况下的返回类型。TResult Func<TResult>()TResult Func<T,TResultl>(T arg)...Func<string,double,int>等价于下面的委托类型:public delegate int someDelegate(string arg1,double arg2)如果想使用void为返回型,可使用Action<...> 阅读全文
posted @ 2013-01-21 15:30 息晴海 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 我们可以将事件看做是类似于属性(property)的东西.首先都声明为具有一种特定的类型。对事件来说,必须是一个委托类型。使用属性时,感觉就像是直接对它的字段进行取值和赋值,但你实际上是在调用方法,也就是取值方法和赋值方法。实现属性时,可以在那些方法中做你喜欢做的任何事。但凑巧的是大多数属性都只是实现了简单的字段,有的会加一些校验机制。 同样,在订阅或取消订阅一个事件时,看起来就像是通过+=和-=操作符使用委托类型字段。但和属性的情况一样,这个过程实际是在调用方法(add和remove方法)。对于一个纯粹的事件,你所能做的事情就是订阅(添加一个事件处理程序)或者取消订阅(删除一个事件处理程序. 阅读全文
posted @ 2013-01-21 15:14 息晴海 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 委托(delegate)C语言中的描述:函数指针 实际上,委托在某种程度上提供了间接的方法。换言之。不需要直接指定一个行为,而是将这个行为用某种方式“包含”在一个对象中。这个对象可以像其他任何对象那样使用。在该对象中,可以执行封装的行为。可以选择将委托看做之定义了一个方法的接口,将委托的实例看做实现了那个接口的一个对象。 C#中的委托和现实世界中的遗嘱很像,是需要在恰当的时间执行一系列的操作。如果代码想要执行操作,但不知道操作细节,一般可以使用委托。(我们可以想象成这样,以为老人将遗嘱交付给他的律师,希望将他的财产按意愿分配给子女和慈善机构。这件事情在他过世后的某个时间段会被执行,但他不会知道 阅读全文
posted @ 2013-01-21 14:01 息晴海 阅读(169) 评论(0) 推荐(0) 编辑