C#委托详解,c#委托的使用,C#委托用法详解

C#委托详解,c#委托的使用,C#委托用法详解

本文详细解释了委托在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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 设计一个简单的C#控制台应用程序,C#控制台程序,C# 创建控制台应用程序
  • 深入解析windows第8版,深入解析C#(第4版)
  • 数组代码,c# 数组操作,C# 数组实例介绍(图文)
  • 学会C#要多久,学会c#要多久,c#学习之30分钟学会XAML
  • 回溯法01背包问题c,回溯法求解01背包问题伪代码,C#使用回溯法解决背包问题实例分析
  • xml文件转义字符,xml转意字符,C# XML中的转义字符操作
  • winform 进度条控件,c# 进度条使用
  • winform 进度条控件,c# 进度条使用,C#使用winform实现进度条效果
  • winform backgroundworker,c# isbackground
  • winform backgroundworker,c# isbackground,C# BackgroundWorker用法详解
  • lua与c#交互,lua c#
  • lua与c#交互,lua c#,ToLua框架下C#与Lua代码的互调操作
  • linq c#,linq原理 c#
  • linq c#,linq原理 c#,c#中LINQ的基本用法实例
  • java decimal保留两位小数,sql中decimal函数保留2位小数,C#中decimal保留2位有效小数的实现方法
  • 留言与评论(共有 条评论)
       
    验证码: