.net框架读书笔记---委托(一)

接上一篇.net框架读书笔记---事件(三)

现在开始学习委托,按理来说应该先学习委托的,但是Jeffrey Richter先讲的是事件,我也就先看事件了,以前知道委托,现在重新学习;

Microsoft.net框架使用一种称为委托(delegate)的技术来提供回调函数机制,与其他平台的回调机制相比,委托可以确保回调方法是类型安全的;

首先学习委托的说明创建和使用委托:

 

.net框架读书笔记---委托(一) 代码
   
     
class Set
{
private object [] items;
public Set( int numItems)
{
items
= new object [numItems];
for ( int i = 0 ; i < numItems; i ++ )
{
items[i]
= i;
}
}
// 定义一个委托类型
// 注意:该类型嵌套在Set类中
public delegate void Feedback( object value, int item, int numItems);

public void ProcessItems(Feedback feedback)
{
for ( int item = 0 ; item < items.Length; item ++ )
{
if (feedback != null )
{
// 如果指定有回调函数则调用之
feedback(items[item], item + 1 , items.Length);
}
}
}
}

class App
{
static void Main()
{
Set setOfItems
= new Set( 5 );
setOfItems.ProcessItems(
new Set.Feedback(App.FeedbackToConsole));
}

static void FeedbackToConsole( object value, int item, int numItems)
{
Console.WriteLine(
" Processing item{0} of {1} :{2}. " ,item,numItems,value);
}
}

 

委托仅仅是函数指针,那就是说,它能够引用函数,通过传递地址的机制完成。委托是一个类,当你对它实例化时,要提供一个引用函数,将其作为它构造函数的参数。

  每一个委托都有自己的签名,例如:Delegate int SomeDelegate(string s, bool b);是一个委托申明,在这里,提及的签名,就是说SomeDelegate 这个委托 有 string 和 bool 类型的形参,返回一个int 类型。

上面提及的:当你对委托实例化时,要提供一个引用函数,将其作为它构造函数的参数。这里要注意了:被引用的这个函数必须和委托有相同的签名。

看下面的函数:

private int SomeFunction(string str, bool bln){...}

你可以把这个函数传给SomeDelegate的构造函数,因为他们有相似的签名(in other words,他们都有相同的形参类型和个数,并且返回相同的数据类型)。

    SomeDelegate sd = new SomeDelegate(SomeFunction);

  sd 引用了 SomeFunction,也就是说,SomeFunction已被sd所登记注册,如果你调用 sd,SomeFunction 这个函数也会被调用;

你可能感兴趣的:(.net)