《.NET4.0 面向对象编程漫谈》读书笔记 ——第8章 神奇的委托
2011-05-13 12:24
495 查看
第8章 神奇的委托[/b]
[/b]
【简述】:在.NET[/b]中,事件驱动、异步调用和Lambda[/b]都是建立于委托之上的。本章主要介绍委托的基础知识、泛型委托、Lambda[/b]及方法回调等。[/b]
第一节 [/b]委托的概念与使用[/b]
1、 概念:[/b]委托可以看成是一种数据类型,可以用于定义变量。但它所定义的变量能接收的值只能是一个方法。
2、 [/b]实例:[/b]
Public class MathOpt
{
Public int Add(int argument1,int argument2)
{
Return argument1 + argument2;
}
}
Public delegate int MathOptDelegate(int value1,int value2); //定义一个委托类型
MathOptDelegate optDel; //定义一个委托变量
MathOpt obj = new MathOpt();
oppDel = obj.Add; //接收一个对象实例方法
Console.WriteLine(oppDel(1,2)); //方法调用
3、 方法的签名:[/b]定义委托类型时对方法的要求被称为方法的签名(Signature),它规定了方法的参数数目和类型,以及方法的返回值。
4、 [/b]委托的基本用法:[/b]
A、 使用委托动态调用方法:
如 void DoCalculate(CalculateDelegate clmethod) //输入参数是一个委托类型的变量。
B、使用委托实现多窗体通信:实现在不同的对象之间进行信息通信。
其中书中一行错误:frm.recorder = this.ShowCount 改为 frm.recorder = this.Record。
第二节 [/b]深入探索委托技术内幕[/b]
1、 本质:委托本质上一个类,它继承自System.MulticastDelete类,该类维护一个带有链接的委托列表。
2、 调用多播委托时,将按照委托列表的委托列表的顺序而调用的。
3、 它继承的三个重要方法:BeginInvoke、EndInvoke、Invoke。
4、委托一旦创建之后,它的委托调用列表是不可改的。
第三节 [/b]使用泛型委托[/b]
1、 概念:[/b]泛型委托与普通委托类似,不同之处在于使用泛型委托时需要指定泛型参数。如
MyGenericDelegate<int> del = MyFunc;
2、 Func[/b]系统委托[/b]。依其泛型参数的多少有多个重载形式。Func系列委托用于引用一个有返回值的方法。
如 public delegate TResult Func<TResult>()
public delegate TResult Func<T,TResult>(T arg)
public delegate TResult Func<T1,T2,TResult>(T1 arg,T2 arg)
3、 Action[/b]系统委托[/b]。依其泛型参数的多少有多个重载形式。它用于返回void的方法。
如 public delegate void Action()
Public delegate void Action<T>(T obj)
Public delegate void Action<T1,T2>(T1 arg1,T2 arg2)
4、 Predicate<T>[/b]委托[/b]。
A、 定义 public delegate bool Predicate<T>(T obj);
B、 它引用一个返回bool值的方法,在实际运用中,经常使用其变量引用一个“条件判断函数”。
C、 例子:List<T>中有一个Find方法。Public T Find(Predicate<T> match);
第四节 [/b]匿名方法与Lambda[/b]表达式[/b]
1、 [/b]匿名方法:[/b]
A、 实例: public delegate int AddDelegate ( int i,int j);
AddDelegate del = delegate(int i,int j)
{
return i + j;
};
Console.WriteLine(del(100,200));
B、 匿名方法其实是将方法定义与委托变量赋值两个步骤合在一起,从而省掉了单独定义一个方法的麻烦。
2、 [/b]Lambda[/b]表达式:[/b]
A、 实例:SomeDelegateType del2 = arguments => { return arguments.ToString(); };
B、 Lambda表达式其实是就是匿名方法的进一步简化,可以用于定义一个匿名函数,并将其传给一个委托变量。
C、 用法:
C.1当只有一个输入参数时,括号是可选的,可表达式中只有一条return语句时,return 关键字也可省略。
Func<int,bool> del1 = (x) => {return x > 0 ;}
Func<int,bool> del1 = x = > x> 0;
C.2 当有两个或更多的输入参数由逗号分隔。
Func<int,int,bool> del2 = ( x,y) => x ==y;
第五节 [/b]掌握回调的编程技巧[/b]
回调是一种非常有用的编程技术,本节介绍.NET应用程序中实现回调的4种典型方法。
1、 [/b]基于接口的回调实现方案:[/b]
2、 [/b]利用委托实现回调。[/b]
3、 [/b]定时回调。[/b]
利用Time类,可以定时回调一个满足TimerCallBack委托要求的方法。
Time类的构造函数 public Timer(TimerCallback callback,object state,int dueTime,int period)
其中:callback:要定时回调的方法。
State: 向回调方法传送的参数。
Duetime:调用回调方法之前延迟的时间量(以毫秒为单位)。
Period:每隔多少毫秒调用一次回调方法。
4[/b]、多线程回调:[/b]
小结:委托本质上是一个类,它实现了面向对象的,类型安全的方法回调机制。[/b][/b]
[/b]
【简述】:在.NET[/b]中,事件驱动、异步调用和Lambda[/b]都是建立于委托之上的。本章主要介绍委托的基础知识、泛型委托、Lambda[/b]及方法回调等。[/b]
第一节 [/b]委托的概念与使用[/b]
1、 概念:[/b]委托可以看成是一种数据类型,可以用于定义变量。但它所定义的变量能接收的值只能是一个方法。
2、 [/b]实例:[/b]
Public class MathOpt
{
Public int Add(int argument1,int argument2)
{
Return argument1 + argument2;
}
}
Public delegate int MathOptDelegate(int value1,int value2); //定义一个委托类型
MathOptDelegate optDel; //定义一个委托变量
MathOpt obj = new MathOpt();
oppDel = obj.Add; //接收一个对象实例方法
Console.WriteLine(oppDel(1,2)); //方法调用
3、 方法的签名:[/b]定义委托类型时对方法的要求被称为方法的签名(Signature),它规定了方法的参数数目和类型,以及方法的返回值。
4、 [/b]委托的基本用法:[/b]
A、 使用委托动态调用方法:
如 void DoCalculate(CalculateDelegate clmethod) //输入参数是一个委托类型的变量。
B、使用委托实现多窗体通信:实现在不同的对象之间进行信息通信。
其中书中一行错误:frm.recorder = this.ShowCount 改为 frm.recorder = this.Record。
第二节 [/b]深入探索委托技术内幕[/b]
1、 本质:委托本质上一个类,它继承自System.MulticastDelete类,该类维护一个带有链接的委托列表。
2、 调用多播委托时,将按照委托列表的委托列表的顺序而调用的。
3、 它继承的三个重要方法:BeginInvoke、EndInvoke、Invoke。
4、委托一旦创建之后,它的委托调用列表是不可改的。
第三节 [/b]使用泛型委托[/b]
1、 概念:[/b]泛型委托与普通委托类似,不同之处在于使用泛型委托时需要指定泛型参数。如
MyGenericDelegate<int> del = MyFunc;
2、 Func[/b]系统委托[/b]。依其泛型参数的多少有多个重载形式。Func系列委托用于引用一个有返回值的方法。
如 public delegate TResult Func<TResult>()
public delegate TResult Func<T,TResult>(T arg)
public delegate TResult Func<T1,T2,TResult>(T1 arg,T2 arg)
3、 Action[/b]系统委托[/b]。依其泛型参数的多少有多个重载形式。它用于返回void的方法。
如 public delegate void Action()
Public delegate void Action<T>(T obj)
Public delegate void Action<T1,T2>(T1 arg1,T2 arg2)
4、 Predicate<T>[/b]委托[/b]。
A、 定义 public delegate bool Predicate<T>(T obj);
B、 它引用一个返回bool值的方法,在实际运用中,经常使用其变量引用一个“条件判断函数”。
C、 例子:List<T>中有一个Find方法。Public T Find(Predicate<T> match);
第四节 [/b]匿名方法与Lambda[/b]表达式[/b]
1、 [/b]匿名方法:[/b]
A、 实例: public delegate int AddDelegate ( int i,int j);
AddDelegate del = delegate(int i,int j)
{
return i + j;
};
Console.WriteLine(del(100,200));
B、 匿名方法其实是将方法定义与委托变量赋值两个步骤合在一起,从而省掉了单独定义一个方法的麻烦。
2、 [/b]Lambda[/b]表达式:[/b]
A、 实例:SomeDelegateType del2 = arguments => { return arguments.ToString(); };
B、 Lambda表达式其实是就是匿名方法的进一步简化,可以用于定义一个匿名函数,并将其传给一个委托变量。
C、 用法:
C.1当只有一个输入参数时,括号是可选的,可表达式中只有一条return语句时,return 关键字也可省略。
Func<int,bool> del1 = (x) => {return x > 0 ;}
Func<int,bool> del1 = x = > x> 0;
C.2 当有两个或更多的输入参数由逗号分隔。
Func<int,int,bool> del2 = ( x,y) => x ==y;
第五节 [/b]掌握回调的编程技巧[/b]
回调是一种非常有用的编程技术,本节介绍.NET应用程序中实现回调的4种典型方法。
1、 [/b]基于接口的回调实现方案:[/b]
2、 [/b]利用委托实现回调。[/b]
3、 [/b]定时回调。[/b]
利用Time类,可以定时回调一个满足TimerCallBack委托要求的方法。
Time类的构造函数 public Timer(TimerCallback callback,object state,int dueTime,int period)
其中:callback:要定时回调的方法。
State: 向回调方法传送的参数。
Duetime:调用回调方法之前延迟的时间量(以毫秒为单位)。
Period:每隔多少毫秒调用一次回调方法。
4[/b]、多线程回调:[/b]
小结:委托本质上是一个类,它实现了面向对象的,类型安全的方法回调机制。[/b][/b]
相关文章推荐
- 《.NET4.0 面向对象编程漫谈》读书笔记 ——第11章 对象集合与LINQ
- 《.NET4.0 面向对象编程漫谈》读书笔记 ——第10章 异步编程模式
- 《.NET4.0 面向对象编程漫谈》读书笔记 ——第2章 数据类型趣谈
- [转]《.NET4.0 面向对象编程漫谈》读书笔记 ——第10章 异步编程模式
- 《.NET4.0 面向对象编程漫谈》读书笔记 ——第14章 对象间的协作与信息交换
- 《.NET4.0 面向对象编程漫谈》读书笔记 ——第7章 程序集
- 《.NET4.0 面向对象编程漫谈》读书笔记 ——第9章 事件及事件驱动
- 《.NET4.0 面向对象编程漫谈》读书笔记 ——第6章 异常捕获与处理
- 《.NET4.0 面向对象编程漫谈》读书笔记 ——第13章 对象的复制与序列化
- 《.NET4.0 面向对象编程漫谈》读书笔记 目录
- Android开发艺术探索》读书笔记 (8) 第8章 理解Window和WindowManager
- [读书笔记]多播委托
- 【读书笔记】 泛型委托
- 【读书笔记】编程匠艺 第8章
- 《TCP/IP详解 卷1:协议》读书笔记 第8章 Traceroute程序
- 《C++ Primer 4th》读书笔记 第8章-标准IO库
- 读书笔记:理解委托与事件
- Visual.C#.2010从入门到精通].(Visual.C#.2010.Step.By.Step)读书笔记 委托、lambda(十六)
- 《C#图解教程》读书笔记第15章——委托
- JS DOM 编程艺术(第2版)读书笔记 第8章 充实文档的内容