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用来声明一种数据类型接受方法。

(0)

相关推荐

  • c# 委托和事件实例学习

    Common.cs: 复制代码 代码如下: using System; using System.Collections.Generic; using System.Text; namespace DelegateAndEvent.App_Code { public class Common { //定义全局变量. public static string txt = ""; #region 定义方法 public string HelloCSharp(string name) { t

  • c#委托详解和和示例分享

    什么是委托? 委托是寻址方法的.NET版本,使用委托可以将方法作为参数进行传递.委托是一种特殊类型的对象,其特殊之处在于委托中包含的只是一个活多个方法的地址,而不是数据. 委托虽然看起来像是一种类型,但其实定义一个委托,是定义了一个新的类.下面这行代码,定义了一个委托,使用ILDasm.exe查看其生成的IL代码如图所示: 复制代码 代码如下: //定义委托,它定义了可以代表的方法的类型,但其本身却是一个类 public delegate int methodDelegate(string st

  • c#委托与事件(详解)

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

  • C# 委托的三种调用示例(同步调用 异步调用 异步回调)

    首先,通过代码定义一个委托和下面三个示例将要调用的方法: 复制代码 代码如下: public delegate int AddHandler(int a,int b);    public class 加法类    {        public static int Add(int a, int b)        {            Console.WriteLine("开始计算:" + a + "+" + b);            Thread.Sl

  • 深入理解C#中常见的委托

    一提到委托,浮现在我们脑海中的大概是听的最多的就是类似C++的函数指针吧,呵呵,至少我的第一个反应是这样的.关于委托的定义和使用,已经有诸多的人讲解过,并且讲解细致入微.我就不用多废话了.今天我要说的是C#中的三种委托方式:Func委托,Action委托,Predicate委托以及这三种委托的常见使用场景.Func,Action,Predicate全面解析首先来说明Func委托,通过MSDN我们可以了解到,Func委托有如下的5种类型: 复制代码 代码如下: (1) *delegate TRes

  • C#中委托的+=和-=深入研究

    写在前面 为什么会突然想说说委托?原因吗,起于一个同事的想法,昨天下班的路上一直在想这个问题,如果给委托注册多个方法,会不会都执行呢?为了一探究性,就弄了个demo研究下. += 大家都知道委托都继承自System.MulticastDelegate,而System.MulticastDelegate又继承自System.Delegate,可以通过+=为委托注册多个方法.那么他们是否都执行了呢?执行的结果又是怎样的呢?有返回值和没返回值的是否结果是否一样?那就试着说说+=都干了哪些事? 测试代码

  • C#零基础学习理解委托

    说来惭愧,在大学的课程中,竟然没有听说过委托这个名称.那么今天我就带着大家一起探讨下委托和事件. 咱们先来看下委托 我主要从以下几个方面讲解 1,  为什么使用委托  2.什么是委托  3.委托如何使用 为什么使用委托? 委托是c#中非常重要的一个概念,使用委托使程序员可以将方法引用封装在委托对象内.然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法.与C或C++中的函数指针不同,委托是面向对象,而且是类型安全的. 什么是委托? 委托是一种引用方法的类型,一旦为委

  • C#中的委托和事件学习(续)

    引言 如果你看过了 C#中的委托和事件 一文,我想你对委托和事件已经有了一个基本的认识.但那些远不是委托和事件的全部内容,还有很多的地方没有涉及.本文将讨论委托和事件一些更为细节的问题,包括一些大家常问到的问题,以及事件访问器.异常处理.超时处理和异步方法调用等内容. 为什么要使用事件而不是委托变量? 在 C#中的委托和事件 中,我提出了两个为什么在类型中使用事件向外部提供方法注册,而不是直接使用委托变量的原因.主要是从封装性和易用性上去考虑,但是还漏掉了一点,事件应该由事件发布者触发,而不应该

  • .Net常见问题之C#中的委托

    有朋友说委托和C++中的函数指针很像,但是两者真的有差别.在C++中,函数指针不是类型安全的,它所指向的是内存中的某一个位置,但是我们没有办法判断这个指针实际指向的是什么,对于参数和返回类型更难以判断了.但是.NET中的委托则完全不同,它是类型比较安全的类,我们很明白的知道委托定义的返回类型和参数类型.它不仅包含了方法的引用,而且包含了方法的引用.下面通过一段代码给大家分享下对委托的理解: 什么是委托 在实际的开发过程中,有时某个方法执行的操作并不是针对数据进行的,而是针对另一个方法,但是这个方

  • 浅谈C# 中的委托和事件

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

  • C#中的委托数据类型简介

    什么是委托? 委托是一个类型安全的对象,它指向程序中另一个以后会被调用的方法(或多个方法).通俗的说,委托是一个可以引用方法的对象,当创建一个委托,也就创建一个引用方法的对象,进而就可以调用那个方法,即委托可以调用它所指的方法. 来看下面的例子,类deleMthod定义了3个方法,add.minus和multi,他们都具有相同的输入参数列表(int x,int y)和输出参数类型int,那么我们就说这三个方法具有相同的方法签名.开发者可以抽象地用 int 某名称(int x,int y) 的一种

  • C#中的委托使用

    从今天开始写关于C#的系列文章,本篇文章主要讲解C#中的委托使用. 委托其实就是一种数据类型,和int,string是一样的概念. 如果要把一个字符串赋值给一个变量,用string声明一个变量即可.如果要把一个方法赋值给一个变量,那么用什么关键字呢?当然就是用委托了,所以用委托声明的变量就可以接受一个方法了,之后那个变量就可以像方法一样执行. 下面开始详细介绍: 先看一段代码: static void Main(string[] args) { int i; //可以接受一个整数的变量 stri

  • 一篇文章彻底搞清楚c#中的委托与事件

    一.什么是委托呢? 听着名字挺抽象,确实不好理解.面试官最喜欢考察这个,而且更喜欢问:"委托和事件有何异同?".如果对一些知识点没有想明白,那么很容易被绕进去.研究任何事物,我们不妨从它的定义开始,委托也不例外.那么先来看c#中的委托定义,先来个例子: public delegate void GetPacage(string code); 这个委托,看起来就是个方法签名,取包裹,需要验证码.与方法签名不同的地方,在于多了一个delegate.c#中不乏一些便利好用的语法,比如fore

  • C#中的委托delegate用法的示例详解

    C#中的委托 委托和事件在 .NET Framework 中的应用非常广泛,然而,较好地理解委托和事件对很多接触 C# 时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里堵得慌,浑身不自在.本章中,我将由浅入深地讲述什么是委托.为什么要使用委托.事件的由来..NET Framework 中的委托和事件.委托中方法异常和超时的处理.委托与异步编程.委托和事件对Observer 设计模式的意义,对它们的编译代码也做了讨论. 1.

  • 大白话讲解C# 中的委托

    有一天,你写了好多好多带"形参"的构造函数(就是"方法",同义),而且需要向这些构造函数里传递同样的"实参",然后你就憨憨地一个一个函数的调用并赋予同样的"实参",这一天就这么过去了... 又过了几天,你又要再一次调用这么多函数了,你再老老实实地一个一个函数进行调用?!聪明的你,肯定会想:真TM麻烦!有没有一劳永逸的办法呢? 你需要的正是----"委托" 来,先看一个简单的例子,要表述的是----有一位贵宾

  • C#中的委托介绍

    什么是委托? 之前写了事件的介绍:http://www.jb51.net/article/59461.htm 这里也把委托相关知识也总结一下. 委托是c#中类型安全的,可以订阅一个或多个具有相同签名方法的函数指针 声明委托的方式:delegate 返回值类型 委托类型名(参数) 比如: 复制代码 代码如下: delegate void StringProcess(string s); 注意:这里的除了前面的delegate,剩下部分和声明一个函数一样,但是StringProcess不是函数名,而

  • 浅谈C#中的委托、事件与异步

    从刚接触c#编程到现在,差不多快有一年的时间了.在学习过程中,有很多地方始终似是而非,直到最近才弄明白. 本文将先介绍用法,后评断功能. 一.委托 基本用法: 1.声明一个委托类型.委托就像是'类'一样,声明了一种委托之后就可以创建多个具有此种特征的委托.(特征,指的是返回值.参数类型) public delegate void SomeKindOfDelegate(string result); 2.创建一个在1中创建的委托类型的委托. public SomeKindOfDelegate aD

随机推荐