C#中的委托使用
作者:hebedich 发布时间:2021-08-12 09:36:57
从今天开始写关于C#的系列文章,本篇文章主要讲解C#中的委托使用。
委托其实就是一种数据类型,和int,string是一样的概念。
如果要把一个字符串赋值给一个变量,用string声明一个变量即可。如果要把一个方法赋值给一个变量,那么用什么关键字呢?当然就是用委托了,所以用委托声明的变量就可以接受一个方法了,之后那个变量就可以像方法一样执行。
下面开始详细介绍:
先看一段代码:
static void Main(string[] args)
{
int i; //可以接受一个整数的变量
string str; //可以接受一个字符串的变量
}
在Main方法内声明了2个变量:i和str。大家都很熟悉的代码,变量i表明它可以接受一个整数,变量str表明它可以接受一个字符串。
那么如果我想声明一个变量既可以接受整数又可以接受字符串,那该用什么数据类型来声明这样的变量呢?
答案很简单:用class。
public class MyClass
{
public int i { get; set; } //接受整数
public string str { get; set; } //接受字符串
}
那么我们就创建了一种数据类型:MyClass,用它声明的变量可以同时接受一个整数和一个字符串。
如下:
static void Main(string[] args)
{
MyClass obj = new MyClass();
obj.i =1;
obj.str ="我是字符串";
}
现在问题来了:我想要一种数据类型可以声明一个变量用于接受一个方法。
既然这种数据类型要接受一个方法,那我们先看看方法长什么样:
public string Method(int m,int n)
{
return "";
}
上面的Method方法最主要的特点就是这个方法的输入参数数据类型与输出的数据类型。
通常我们会调用各种方法,调用方法前我们会确定方法的输入参数的数据类型和方法输出的数据类型,至于方法的主体我们通常不关心,方法的主体由方法编程人员去完成即可。
所以我们编写一个方法,调用一个方法前都要明确的方法的输入输出数据类型。
对于上面Method方法的输入数据类型为2个整数,输出的是一个字符串。
现在我们要声明一个变量来接受这个方法,那么这个变量的数据类型也应该要明确输入,输出的数据类型。那么我们应该定义符合那个方法输入与输出一致的数据类型。
public class Test
{
//这种数据类型可以接受一个方法
public delegate string MethodDelegate(int i1,int i2);
}
好了,我已经声明了和上面Method方法一样的输入与输出类型的一个数据类型了:MethodDelegate。
那么我们就可以用这个数据类型来接受Mehtod方法了,完整代码如下:
class Program
{
//这种数据类型可以接受一个方法
public delegate string MethodDelegate(int i1, int i2);
/// <summary>
/// 我们可以用MethodDelegate声明一个变量来接受方法了
/// </summary>
public void Test()
{
MethodDelegate IamMethod = Method; //把下面那个Method方法赋值给变量了。
var result=IamMethod(1, 2); //然后把这个变量当作方法一样执行即可。
}
public string Method(int m, int n)
{
return "";
}
}
在上面第4行:我们用delegate关键字声明了一种数据类型:这种数据类型和我们想要接受什么样方法的输入输出类型保持一致就可以了。
那么上面的MethodDelegate就可以接受带2个int类型的输入参数并且返回类型是string的任何方法了。
现在我们发现委托和int,string是一样的概念,只不过,int用来接受整数,string用来接受字符串,delegate用来声明一种数据类型接受方法。


猜你喜欢
- 目录项目说明零,准备工作Github地址一,项目背景及系统结构二,持久层设计三,Model层四,DAO(Data Access Object
- 开发中有时候需要自己封装分页排序时,List如何对某一属性排序呢,分享一个小实例,大家共勉,希望能对大家有用,请多多指教。1.Student
- 前言Android开发中经常使用findViewById来获取控件然后进行一些列操作,当控件太多的时候代码就非常臃肿,今天就来学习一个新的开
- Spring中Profile对不同环境提供不同配置功能的支持,可以通过激活、指定参数等方式快速切换环境。文件名格式:application-
- 用Stopwatch分段监控了一下,发现耗时最多的函数是SaveToExcel此函数中遍列所有数据行,通过Replace替换标签生成Exce
- 本文实例为大家分享了java实现打字游戏的具体代码,供大家参考,具体内容如下import java.util.Random;import j
- 本文讲述在mybatis中如何使用ognl表达式实现动态组装sql语句新建Users实体类:public class Users { &nb
- 1. 常规使用请求一个权限,然后接收结果回调HoloPermission.with(this,Manifest.permission.WRI
- 我们可能会用各种应用服务部署我们的Java应用,比如Tomcat、WAS、weblogic等。Tomcat和WAS可能会比较少遇到一些奇怪的
- 需要用到的知识:注解、AOP、ExpiringMap(带有有效期的映射)我们可以自定义注解,把注解添加到我们的接口上。定义一个切面,执行方法
- try { // 方
- 有时,类或方法需要对类型变量加以约束。下面是一个典型的例子,我们要寻找数组中的最小元素:public class ArrayAlg { &n
- 研究背景 我們在搞新的配置中心Nacos的時候,为了获取新的配置中心的配置文件中配置的 dat
- 话不多说,请看实例代码String ip = request.getHeader("x-forwarded-for");
- 一、声明式这种方法不需要对原有的业务做任何修改,通过在XML文件中定义需要拦截方法的匹配即可完成配置,要求是,业务处理中的方法的命名要有规律
- 作为Android的四大组件之一,ContentProvider作为进程之间静态数据传递的重要手段,其在系统级别的应用中起了重大的作用。毫无
- IFormattable接口提供了ToString()方法的定义,使用该方法可以将对象的值按照指定的格式转化成字符串的功能。下面是ToStr
- 在之前的博客使用SpringMVC创建Web工程并使用SpringSecurity进行权限控制的详细配置方法 中,我们描述了如何配置一个基于
- 缘起随着 App 的成长,我们难免会遇到以下这些需求:H5 跳原生界面Notification 点击调相关界面根据后台返回数据跳转界面,例如
- TreeMap 的实现就是红黑树数据结构,也就说是一棵自平衡的排序二叉树,这样就可以保证当需要快速检索指定节点。TreeSet 和 Tree