C#中的委托使用_C#教程

从今天开始写关于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用来声明一种数据类型接受方法。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c#
, 委托的使用
委托使用
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。

时间: 2024-10-08 18:13:29

C#中的委托使用_C#教程的相关文章

.Net WInform开发笔记(二)Winform程序运行结构图及TCP协议在Winform中的应用_C#教程

中午没事,把去年刚毕业那会画的几张图翻出来了,大概介绍Winform应用程序运行的过程,以及TCP协议在Winform中的应用.如果有Windows消息机制等基础,很好理解这两张图. (1)Winform应用程序运行结构图 开发笔记(二)Winform程序运行结构图及TCP协议在Winform中的应用_C#教程-tcp ip协议 层结构图"> (2)TCP通讯协议在Winform程序中的应用示意图 熟悉整个程序的来龙去脉,编程的时候就会很轻松,不会云里雾里. 另附公司招聘面试题一份,用了几

Winform在DataGridView中显示图片_C#教程

首先,要添加图片列,绑定数据的时候会触发CellFormatting事件,在事件中取出图片路径,读取图片赋值给当前单元格. private void dataGridview1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { if (dataGridview1.Columns[e.ColumnIndex].Name.Equals("Image")) { string path = e.Valu

C#加密在实际中的应用_C#教程

在系统的管理员有着实际的应用,对于一个数据库管理系统来说,数据库安全还是挺重要的,所以在存入到数据库的密码通常都是加密的.即使有着hack攻破数据库后,也不会那样的容易的盗取你的账号和密码,这样可以减轻你的不必要的损失.好吧,下面就是一些基本的实现代码: 加密的代码格式是一样的: 第一步: 复制代码 代码如下: <span style="font-size: 16px; color: #000000;">System.Web.Security.FormsAuthentica

C#.NET学习笔记5 C#中的条件编译_C#教程

条件编译是C#比Java多出的东西,但我跟前辈请教后,他们都说条件编译在实际的项目开发中不怎么使用.鉴于是新内容,我还是做做笔记,理解一下好了. 条件编译属于编译预处理的范畴,它能让我们通过条件编译的机制,将部分代码包括进来或者排除出去,其作用与if-else类似.条件编译指令有以下四种? #if? #elif? #else? #endif 条件编译指令有以下四种 #if #elif    #else #endif 下面我们通一些例子来说明它们的用法 复制代码 代码如下: #define Deb

c#中设置快捷键_C#教程

最近找了一些资料,是讲在C#中设置快捷键运行方法或程序的 要设置快捷键必须使用user32.dll下面的两个方法. BOOL RegisterHotKey( HWND hWnd, int id, UINT fsModifiers, UINT vk );  和 BOOL UnregisterHotKey( HWND hWnd, int id );  转换成C#代码,那么首先就要引用命名空间System.Runtime.InteropServices;来加载非托管类user32.dll.于是有了:

c#循环中产生伪随机数_C#教程

这种结果的原因在于,Random()函数的默认种子是时间,但在循环中产生随机数时,由于运算速度太快,用做种子的时间是相同的(毫秒级),因此产生的随机数序列是相同的,这样最终的随机数就会相同.(基于"线性同余法"的随机数发生器) 解决方法是,产生一个全局唯一标识符,使用它的哈希值来做种子产生随机数.代码如下: 复制代码 代码如下: using System; using System.Collections.Generic; using System.Linq; using System

浅谈C# 中的委托和事件_C#教程

引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在.本文中,我将通过两个范例由浅入深地讲述什么是委托.为什么要使用委托.事件的由来..Net Framework中的委托和事件.委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论. 将方法作为方法的参数 我们先不管这个标题

C#中事件处理的个人体会_C#教程

作者: juky_huang 事件的简单解释: 事件是对象发送的消息,以发信号通知操作的发生.操作可能是由用户交互(例如鼠标单击)引起的,也可能是由某些其他的程序逻辑触发的.引发(触发)事件的对象叫做事件发送方.捕获事件并对其作出响应的对象叫做事件接收方. 在事件通信中,事件发送方类不知道哪个对象或方法将接收到(处理)它引发的事件.所需要的是在源和接收方之间存在一个媒介(或类似指针的机制)..NET Framework 定义了一个特殊的类型(Delegate),该类型提供函数指针的功能. 与其他

使用VS2010 C#开发ActiveX控件(下),完整代码打包下载_C#教程

其实如果我们不进行设置,只是修改了代码,运行程序以后,其出错界面如下图1所示: 开发ActiveX控件(下),完整代码打包下载_C#教程-vs2010使用教程 c"> 图1 抛出异常如下: ************** Exception Text ************** System.MethodAccessException: Attempt by security transparent method 'Rare.Card.Libary.Controls. ReadCardCo