当前位置: 首页 > news >正文

网站设计的意义江西省历史建筑信息平台

网站设计的意义,江西省历史建筑信息平台,redis wordpress 提速,wordpress爆破字典本篇文章来学习一下C#的委托,委托是C#中的一个重要概念,它允许将方法作为参数传递给其他方法。C#中的委托类似于C或C中的函数指针,并且类型安全。 委托 1.委托的定义 委托(delegate)是方法的代理/代表,委托…

       本篇文章来学习一下C#的委托,委托是C#中的一个重要概念,它允许将方法作为参数传递给其他方法。C#中的委托类似于C或C++中的函数指针,并且类型安全。

委托

1.委托的定义

       委托(delegate)是方法的代理/代表,委托的是方法,当调用委托时就是调用了这个方法。委托是一类行为的抽象。是方法的引用,是一种数据类型。简而言之,委托是一种数据类型(关键字delegate);委托代表的是方法;当调用委托时就是调用了这个方法。

详细解释:

委托是【声明了返回类型和参数组成】一种数据类型;

委托代表【代理/表示】的是方法【代表和委托签名一致的任何方法,签名:返回类型和参数组成】、【委托是一类行为的抽象】

当调用委托时就是调用【间接调用】了这个方法。【因为委托能存储方法的地址(引用)】

2.签名

2.1签名定义

       签名(Signature)通常指的是方法、构造函数、委托、事件等的名称、参数类型和返回类型的组合。签名用于唯一标识一个方法或函数,帮助编译器和运行时区分不同的方法或函数。

2.2方法签名的组成部分

①方法名:方法的名称,通常用于标识该方法。

②参数列表:方法的参数类型及其顺序,不包括参数的名称,但包括参数的类型。

③返回类型:方法的返回类型,但不包括方法的访问修饰符(如public、private等)和static修饰符。

       注意,方法签名并不包括访问修饰符、返回类型、static或virtual等修饰符,只关注方法的名称和参数列表。

2.3签名举例

示例1:简单方法签名

public int Add(int a, int b)
{return a + b;
}

方法名称:Add

参数列表:int a, int b(顺序和类型都很重要)

返回类型:int(方法返回 int 类型的值)

方法的签名:Add(int, int)。

示例2:不同签名

public int Add(int a, int b)
{return a + b;
}public double Add(double a, double b)
{return a + b;
}

这两个方法虽然名称相同(Add),但由于它们的参数类型不同,因此它们的签名是不同的:

Add(int, int):接受两个int类型的参数,返回int类型。

Add(double, double):接受两个double类型的参数,返回double类型。

因此,尽管方法名称相同,但它们的签名不同,所以是不同的方法。

示例3:委托的签名

委托的签名是指它所引用的方法的签名。委托签名包括方法的返回类型和参数类型,而不包括委托本身的名称或其他修饰符。

public delegate int AddHandler(int x, int y);

这个委托AddHandler的签名是:int AddHandler(int, int)。这意味着它可以引用任何返回类型为int且接受两个int型参数的方法。委托名称AddHandler并没有被包括在签名中。签名仅描述方法的“形态”。

绑定到方法:

AddHandler addHandler = Add;

如果Add方法的签名与委托签名匹配,绑定是合法的。

3.委托的3个基本使用步骤

3.1定义委托

在定义端定义委托,,习惯命名XXXHandler:如SelectHandler,delegate前可以有访问修饰符,默认为internal,定义格式如下

delegate 返回类型 委托类型名(形参列表);

delegate void Handler();

3.2创建实例

在调用端创建实例,即实例化委托,为委托指定/绑定方法

Handler handler = new Handler(Fun);//所在类的静态方法Fun的调用
Handler handler = new Handler(A.FunA);//类A的静态方法FunA的调用

3.3调用委托

在调用端调用委托,调用委托和调方法相似,有参数就要写参数,有返回值就可以返回

handler();

4.委托的使用

例1:基本语法的使用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace DelegatePro
{//调用端class DelegateDemo1{static void Main(string[] args){//②实例化委托//Handler handler = new Handler(Fun);//输出:使用委托,调用FunHandler handler = new Handler(A.FunA);//输出:使用委托,调用类A的FunA//③调用委托handler();}static void Fun(){Console.WriteLine("使用委托,调用Fun");Console.ReadLine();}}//定义端//①定义委托delegate void Handler();class A{public static void FunA(){Console.WriteLine("使用委托,调用类A的FunA");Console.ReadLine();}}
}

例2:使用委托实现两数(int)相加

       定义一个两数相加的方法 int(int,int),使用委托来调用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace DelegatePro
{//调用端class DelegateDemo2{static void Main(string[] args){//②实例化委托Handler handler = new Handler(A.Add);//③调用委托int sum=handler(1,2);//3}}//定义端//①定义委托delegate int Handler(int a,int b);class A{public static int Add(int a,int b){return a + b;}}
}

4.委托的分类

4.1单播委托

       一个委托对象只关联一个方法->单播调用。

using System;public class DelegatePro
{//调用端class DelegateDemo3{//②实例化委托//创建一个单播委托,指向 GreetHello 方法GreetDelegate greet = new GreetDelegate(GreetHello);//③调用委托greet("Alice"); //输出: Hello, Alice}//定义端//①定义委托public delegate void GreetDelegate(string name);public static void GreetHello(string name){Console.WriteLine("Hello, " + name);}
}

4.2多播委托

       一个委托对象关联多个方法,只返回最后方法的结果->多播调用。

using System;namespace DelegatePro
{//调用端class DelegateDemo4{static void Main(string[] args){//②实例化委托//创建一个多播委托,指向 Add和 Division 方法Handler handler = new Handler(A.Add);//使用 += 将方法添加到委托中handler += new Handler(A.Division);//③调用委托int res=handler(6,2);//3}}//定义端//①定义委托delegate int Handler(int a,int b);class A{public static int Add(int a,int b){return a + b;}public static int Division(int a, int b){return a / b;}}
}

       上述res的结果为3,因为handler是一个多播委托,它依次调用A.Add和A.Division方法。在多播委托中,只有最后一个方法的返回值会被保留。如果需要处理多播委托中所有方法的返回值,需要额外的逻辑来收集它们。所以A.Division返回的3。

      因此,委托有返回值不适合多播执行,委托无返回值适合多播执行。

       好了,本次的分享到这里就结束啦,希望对你有所帮助~

http://www.hyszgw.com/news/68869.html

相关文章:

  • 搭建高端网站在酒吧里做那个视频网站
  • 新乡 网站建设平台推广公众平台营销
  • 比特币交易所网站开发WordPress 手机编辑
  • 外贸网站推广怎样做怎样在手机上网站建设
  • 长沙做无痛肠镜东大医院l网站新蔡哪有做网站建设的
  • 企业网站申请流程佛山市南海区城乡建设局网站
  • 嘉兴品牌网站莱西网站建设哪家好
  • 网站建设 青岛二级网页制作教程
  • 怎么0成本做网站兰州网站建设平台分析
  • 无锡企业如何建网站云南云桥建设股份有限公司官方网站
  • wordpress中文网站模板百度怎样建设网站
  • 宜昌网站建设制作公司简单网站建设策划书范文
  • 集团网站开发多少钱产品目录网站模板
  • 柳州网站建设工作室简述网站建设有哪些步骤
  • 做网站英文编辑有前途wordpress网站设计作业
  • 网站开发平台的公司营销型网站设计公司
  • vps 网站发布怎么做各个地图网站的认证
  • 网上做的比较好的竞彩网站潍坊市网站建设
  • 甜品网站模板代码家装公司文案
  • 盐山县做网站价格济南高端网站建设价格
  • 用asp做的网站打开页面很慢dede手机网站开发
  • html中文美食网站模板前端做兼职网站
  • 做网站不推广有效果吗网站建设苏州
  • 漂亮的学校网站模板下载金华建站价格
  • 整站seo优化哪家好宽带多少钱一个月
  • 网站接入服务单位wordpress分类目录和标签的作用
  • 怎么上传网站图片的链接wordpress 多个边栏
  • 地产网站建设提交网址给百度
  • 旅游网站的广告预算怎么做网站免费下载app
  • 网站建设 图纸网腾讯云跑wordpress怎么样