`

委托(一)-委托概诉

阅读更多
委托
1. 什么是委托
委托是一种引用方法的类型,一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值,其实委托类似与C++中的函数指针,但委托是类型安全和可靠的,委托是事件的基础
2. 委托概诉
l 委托类似于 C++ 函数指针,但它是类型安全的
l 委托允许将方法作为参数进行传递
l 委托可以用于定义回调方法
l 委托可以链接在一起;(:对一个事件调用多个方法)
l 方法不需要与委托签名精确匹配。
l C#2.0中引入了匿名方法的概念,该方法允许将代码作为参数传递,以代替单独定义的方法(下面我们会讲到的)
3. 何时使用委托而不使用接口
以下情况中使用委托:
l 在设计事件的时
l 封装静态方法时
l 当调用方不需要访问实现该方法的对象中的其他属性、方法或接口时
l 当类可能需要该方法的多个实现时
在以下情况中使用接口:
l 当存在一组可能被调用的相关方法时
l 当类只需要方法的单个实现时
l 当使用接口的类想要将该接口强制转换为其他接口或类类型时
l 当正在实现的方法链接到类的类型或标识时:例如比较方法
4. 委托的关联方式
1) 与命名方法关联
委托可以与命名方法关联。使用命名的方法对委托进行实例化时,该方法将作为参数传递这就是使用命名的方法,一般用于对静态方法货实例方法进行封装(2.0之前的版本中使用命名的方法是对委托进行实例化的唯一方式)
2) 与匿名方法关联
匿名方法将代码块传递为委托参数,使用匿名方法就不必创建单独的方法,因此减少实例化委托所需要的编码系统开销
注意:
u 匿名方法的参数的范围是 匿名方法块
u 在目标在块外部的匿名方法块内使用跳转语句(如 gotobreak continue)是错误的。
u 目标在块内部的匿名方法块外部使用跳转语句(如 gotobreak continue)也是错误的
u 如果局部变量和参数的范围包含匿名方法声明,则该局部变量和参数称为该匿名方法的外部变量或捕获变量
5. Dome
using System;
using System.Collections.Generic;
using System.Text;
namespace DelegaterDome
{
delegate void Add(int x,int y);// //定义一个委托方法
class Program
{
static void Main(string[] args)
{
#region匿名方法
System.Threading.Thread t1 = new System.Threading.Thread(delegate()
{
System.Console.WriteLine("aaa");
//System.Threading.Thread.Sleep(2000);
System.Console.WriteLine("bbb");
});
t1.Start();
int t2 = 10;
int t3 = 20;
Add add = delegate(int x, int y)
{
Console.WriteLine("总和为:{0}",x+y);
};
add(t2, t3);
#endregion
#region命名方法
add = new Add(Program.Sum);
add(t2, t3);
#endregion
Console.ReadLine();
}
static void Sum(int x, int y)
{
Console.WriteLine("总和为:{0}", x + y);
}
}
}
6.
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics