当前位置:网站首页>C#中对委托的理解和使用
C#中对委托的理解和使用
2022-07-30 05:41:00 【凡梦_】
.Net中要把方法作为参数传递给其它方法时,需要用委托来实现。即委托是.Net中用来进行方法寻址的。类似C++中的函数指针。C++中函数指针是非类型安全的,仅仅指向的是内存位置。并没有定义具体的参数类型、返回类型。.Net中的委托是类型安全的,委托定义了参数类型和返回类型。
委托在.Net中是一种特殊类型的对象,对象中包含了一个或者多个方法的地址。也有人说委托是方法的容器。委托常用在方法回调、事件调用上。委托(Delegate)都派生自System.Delegate类。委托使用包括委托声明和委托实例化。
一、委托的声明
委托的声明类似于变量的声明:
publicdelegateintMyDelegate(inti,intj);
public为范围定义,delegate为委托的关键字,int 为返回参数的类型,MyDelegate为委托的名称,括号中的两个int为传入的参数。
在定义委托时必须给出返回参数、传入参数的类型。委托可以定义在类的内部、也可以定义在类的外部,可以通过public、private、protected定义访问范围。
委托的声明语法:
delegate <return type> <delegate-name> <parameter list>
二、委托实例化和使用
委托声明后需要通过new关键字进行实例化。实例化时需要把委托指向的方法传递给委托,这里的方法只需要方法名称,不需要方法参数。如:
MyDelegate myDelegate =newMyDelegate(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;
}
}
}
边栏推荐
猜你喜欢
随机推荐
目前主流浏览器以及对应的内核
C语言人机大战之三字棋博弈
Misc of CTF - other types of steganography
easyexcel使用教程-导出篇
P3 元宝第五单元笔记
Dcat Admin installation
VS2022中关于scanf函数报错解决方法
【墨者学院】身份认证失效漏洞实战
50道SQL练习题(刷完直接进大厂)
Qt设置窗口可拖动
npm基本使用
反序列化字符逃逸
Sql操作
CTF之misc-流量分析
EOF的用法——while(scanf(“%d“,&num)!=EOF)
攻防世界easy_web
Redis简单了解
MySQL storage engine
技术人该访问的论坛
MySQL数据库之JDBC编程



![[PASECA2019]honey_shop](/img/8f/7161a63dab10dc02fef1fea075401a.png)


![[HCTF 2018]admin](/img/4e/58234ca163c22fc334334eb89a5b00.png)
