C#系列(1):其实委托很简单(上)
来源:互联网 发布:淘宝店铺模板下载 编辑:程序博客网 时间:2024/05/16 17:33
从今天开始写关于C#的系列文章,本篇文章主要讲解C#中的委托使用。
委托其实就是一种数据类型,和int,string是一样的概念。
如果要把一个字符串赋值给一个变量,用string声明一个变量即可。如果要把一个方法赋值给一个变量,那么用什么关键字呢?当然就是用委托了,所以用委托声明的变量就可以接受一个方法了,之后那个变量就可以像方法一样执行。
下面开始详细介绍:
先看一段代码:
1 static void Main(string[] args)2 {3 int i; //可以接受一个整数的变量4 string str; //可以接受一个字符串的变量5 }
在Main方法内声明了2个变量:i和str。大家都很熟悉的代码,变量i表明它可以接受一个整数,变量str表明它可以接受一个字符串。
那么如果我想声明一个变量既可以接受整数又可以接受字符串,那该用什么数据类型来声明这样的变量呢?
答案很简单:用class。
1 public class MyClass2 {3 public int i { get; set; } //接受整数4 public string str { get; set; } //接受字符串5 }
那么我们就创建了一种数据类型:MyClass,用它声明的变量可以同时接受一个整数和一个字符串。
如下:
1 static void Main(string[] args)2 {3 MyClass obj = new MyClass();4 obj.i =1;5 obj.str ="全接旺";6 }
现在问题来了:我想要一种数据类型可以声明一个变量用于接受一个方法。
既然这种数据类型要接受一个方法,那我们先看看方法长什么样:
1 public string Method(int m,int n)2 {3 return "";4 }
上面的Method方法最主要的特点就是这个方法的输入参数数据类型与输出的数据类型。
通常我们会调用各种方法,调用方法前我们会确定方法的输入参数的数据类型和方法输出的数据类型,至于方法的主体我们通常不关心,方法的主体由方法编程人员去完成即可。
所以我们编写一个方法,调用一个方法前都要明确的方法的输入输出数据类型。
对于上面Method方法的输入数据类型为2个整数,输出的是一个字符串。
现在我们要声明一个变量来接受这个方法,那么这个变量的数据类型也应该要明确输入,输出的数据类型。那么我们应该定义符合那个方法输入与输出一致的数据类型。
1 public class Test2 {3 //这种数据类型可以接受一个方法4 public delegate string MethodDelegate(int i1,int i2);5 }
好了,我已经声明了和上面Method方法一样的输入与输出类型的一个数据类型了:MethodDelegate。
那么我们就可以用这个数据类型来接受Mehtod方法了,完整代码如下:
1 class Program 2 { 3 //这种数据类型可以接受一个方法 4 public delegate string MethodDelegate(int i1, int i2); 5 6 /// <summary> 7 /// 我们可以用MethodDelegate声明一个变量来接受方法了 8 /// </summary> 9 public void Test()10 {11 MethodDelegate IamMethod = Method; //把下面那个Method方法赋值给变量了。12 var result=IamMethod(1, 2); //然后把这个变量当作方法一样执行即可。13 }14 15 public string Method(int m, int n)16 {17 return "";18 } 19 }
在上面第4行:我们用delegate关键字声明了一种数据类型:这种数据类型和我们想要接受什么样方法的输入输出类型保持一致就可以了。
那么上面的MethodDelegate就可以接受带2个int类型的输入参数并且返回类型是string的任何方法了。
现在我们发现委托和int,string是一样的概念,只不过,int用来接受整数,string用来接受字符串,delegate用来声明一种数据类型接受方法。
如果大家有关C#技术方面更多的讨论可以加我的一个技术QQ群:240749438。
- C#系列(1):其实委托很简单(上)
- C#基础知识梳理系列五:委托与事件(上)
- C# 委托系列(二)将方法绑定到委托
- C#中的委托和事件(上)
- C#中的委托和事件(上)
- C#中的委托和事件(上)
- hdu 2042 不容易系列之二(其实非常简单)
- 敏捷其实很简单(6)神坛上的Scrum Master
- 敏捷其实很简单(1)重读敏捷宣言
- 大白话系列之C#委托与事件讲解(序言)
- 大白话系列之C#委托与事件讲解(序言)
- 大白话系列之C#委托与事件讲解(序言)
- 大白话系列之C#委托与事件讲解(序言)
- 大白话系列之C#委托与事件讲解(序言)
- 大白话系列之C#委托与事件讲解(序言)
- 大白话系列之C#委托与事件讲解(序言)
- C#中的委托和事件(上)(转载)
- 简单说 JavaScript中的事件委托(上)
- ContentProvider
- Windows 8 64位系统 在VS2010 32位软件上 搭建 PCL点云库 开发环境
- springmvc之视图和视图解析器
- 基于JFinal2.2的后台业务框架通用模块
- elasticsearch 环境配置问题
- C#系列(1):其实委托很简单(上)
- Spring中事务与aop的先后顺序问题
- 安卓学习笔记(二)ImageView
- Android开发笔记之Jni编程第二弹
- 安卓学习笔记(一)TextView与EditText
- 数组处理
- 二维树状数组_POJ2155_Matrix
- 学习git
- 环信