本文详细解释了委托在C#中的用法,并通过示例代码详细介绍。对大家的学习或者工作都有一定的参考价值,有需要的朋友可以参考一下。
目录
1、什么是委托2、委托的定义3、委托的实例化3.1使用new关键字3.2使用匿名方法3.3使用Lambda表达式4、泛型委托5、C#内置泛型委托6、多播委托
1、什么是委托
就数据结构而言,委托是用户定义的类型,就像类一样。
是委托方法的抽象,它存储了一系列具有相同签名和返回类型的方法的地址。当调用委托时,将执行委托中包含的所有方法。
2、委托的定义
是委托类型,就像类是类型一样。像类一样,委托类型必须在用于创建变量和类型对象之前声明。
委托的声明原型是
委托函数返回类型委托名(函数参数)
例子:public delegate void my delegate(int number);//定义一个委托MyDelegate,该委托可以注册返回void类型并将int作为参数的函数。
3、委托的实例化
3.1 使用new关键字
委托实例化的原型是
类型委托实例别名=新委托类型(注册函数)
示例:my delegate _ my delegate=new my delegate(check mod);//用函数CheckMod将上述MyDelegate委托实例化为_MyDelegate。
3.2 使用匿名方法
Type委托实例别名=委托(函数参数){函数体};
3.3 使用Lambda表达式
班级计划
{
//声明委托
delegate int MyDelegate(int x,int y);
静态void Main(string[] args)
{
//实例化委托
//1,使用new关键字
my delegate _ my delegate=new my delegate(GetSum);
//2.使用匿名方法。
my delegate my delegate=delegate(int x,int y)
{
返回x y;
};
//3.使用Lambda表达式
my delegate myDelegateLambda=(int x,int y)={ return x y;};
}
静态int GetSum(int x,int y)
{
返回x y;
}
}
4、泛型委托
委托也支持使用泛型
通用委托原型:
代表1代表姓名T1,T2,T3.(T1 t1,T2 t2,T3 t3.)
如代表T2代表emot1,T2(t1t);//用两个泛型(T1,T2)定义委托,T2作为委托函数的返回类型,T1作为委托函数的参数类型。
静态boo检查(int i)
{
如果(i%2==0)
{
返回true
}
返回false
}
静态void Main(string[] args)
{
DelegateDemoint,bool _ delegate=Check//将泛型委托T1,T2实例化为int,bool,表示有一个int类型参数,返回类型是bool的函数。
控制台。WriteLine(_ delegate(9));//假
}
5、C#内置泛型委托
# c #中有3个内置的泛型委托。
命名空间委托演示
{
班级计划
{
//声明委托
delegate int MyDelegate(int x,int y);
静态void Main(string[] args)
{
//1.ActionT只能委托不能有返回值的方法。
action string _ action=new action string(say hello);
_ action(' Hello World ');
//2.FunTResult只是一个委托返回值的方法。
Funcint,bool _func=new Funcint,bool(Check);
_ func(5);
//3.谓词:这个委托返回一个布尔值,通常指的是一个“判断条件函数”。
//需要指出的是,判断条件一般是“外部硬条件”,比如“大于50”,而不是由数据本身指定,比如“找数组中最大的元素不合适”。
predicate int _ predicate=new predicate int(Check);
//使用Lambda表达式
Predicateint谓词=p=p % 2==0;
_谓词(26);
}
静态void SayHello(字符串strMsg)
{
控制台。WriteLine(strMsg);
}
//返回值是布尔值
静态布尔校验(int i)
{
如果(i % 2==0)
{
返回true
}
返回false
}
}
}
6、多播委托
当实例化委托时,必须在委托上注册匹配的函数来实例化委托对象。然而,实例化委托不仅可以注册一个函数,还可以注册多个函数。注册多个函数后,执行委托时会按照注册函数的注册顺序依次执行每个注册函数。
函数注册委托的原型:
类型委托实例别名=新委托类型(注册函数)
示例:my delegate _ my delegate=new my delegate(check mod);//在委托instance _checkDelegate上注册函数CheckMod
从.开始。net 2.0,可以直接向实例化委托注册匹配的函数:
类型委托实例别名=注册函数
示例:my delegate _ my delegate=check mod;//在委托instance _myDelegate上注册函数CheckMod
注意:在用=注册其他方法之前,必须实例化委托。如果用该函数注册的委托实例再次被赋予=符号,则相当于重新实例化该委托,以前注册的函数和委托实例之间不再有任何关系。
有=注册功能要委托,和-=注销。
示例:my delegate _ my delegate-=check mod;
如果委托注册了多个函数,如果委托有返回值,那么调用委托时,将返回最后注册的函数的返回值。
命名空间委托演示
{
班级计划
{
//声明委托
delegate int MyDelegate(int x,int y);
静态void Main(string[] args)
{
my delegate _ my delegate=new my delegate(fun 1);
_ myDelegate=fun2
控制台。WriteLine(_myDelegate(10,23));
控制台。read key();//输出10,返回上次注册函数的返回值
}
静态int fun1(int x,int y)
{
返回x y;
}
静态int fun2(int x,int y)
{
返回x;
}
}
}
关于C#委托用法的这篇文章到此结束。希望对大家的学习有帮助,也希望大家多多支持。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。