您的位置:首页 > 编程语言 > C#

C#中对委托的理解和使用

2018-02-27 17:48 232 查看
.Net中要把方法作为参数传递给其它方法时,需要用委托来实现。即委托是.Net中用来进行方法寻址的。类似C++中的函数指针。C++中函数指针是非类型安全的,仅仅指向的是内存位置。并没有定义具体的参数类型、返回类型。.Net中的委托是类型安全的,委托定义了参数类型和返回类型。委托在.Net中是一种特殊类型的对象,对象中包含了一个或者多个方法的地址。也有人说委托是方法的容器。委托常用在方法回调、事件调用上。委托(Delegate)都派生自System.Delegate类。委托使用包括委托声明和委托实例化。一、委托的声明委托的声明类似于变量的声明:public delegate int MyDelegate(int i, int j);public为范围定义,delegate为委托的关键字,int 为返回参数的类型,MyDelegate为委托的名称,括号中的两个int为传入的参数。在定义委托时必须给出返回参数、传入参数的类型。委托可以定义在类的内部、也可以定义在类的外部,可以通过public、private、protected定义访问范围。委托的声明语法:delegate  <return type> <delegate-name> <parameter list>二、委托实例化和使用委托声明后需要通过new关键字进行实例化。实例化时需要把委托指向的方法传递给委托,这里的方法只需要方法名称,不需要方法参数。如:MyDelegate myDelegate = new MyDelegate(AddNum);AddNum为传入的方法名称。完整代码:class Program
{
public delegate int MyDelegate(int i, int j);
static void Main(string[] args)
{
MyDelegate myDelegate = new MyDelegate(AddNum);
int sum=myDelegate(3,5);
Console.WriteLine(sum.ToString());
}
private static int AddNum(int i,int j)
{
return i + j;
}

}
}
三、多路广播委托委托可以包含一个或者多个方法地址,绑定多个方法地址时,可以同时调用多个方法。绑定多个方法:委托实例+=方法名称取消绑定:委托实例-=方法名称广播示例:
class Program
{
public delegate int MyDelegate(int i, int j);
static void Main(string[] args)
{
MyDelegate myDelegate = new MyDelegate(AddNum);
myDelegate += MultiNum;
int sum=myDelegate(3,5);
Console.WriteLine(sum.ToString());
}
private static int AddNum(int i,int j)
{
return i + j;
}
private static int MultiNum(int i,int j)
{
return i * j;
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: