C#委托介绍与简单示例

C#委托介绍

托和事件在.NET Framework[1] 中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易

C#演示委托的简单用法

例子,一个演示委托的代码,最后给出结果。

 代码如下 复制代码

using System;
namespace Example.Dele
{
 class Operations
 {
  public static double MulTwo(double value)
  {
   return value * 2;
  }
  public static double Square(double value)
  {
   return value * value;
  }
 }
 delegate double DoubleOp(double x);
 class Dele
 {
  static void Main()
  {
   DoubleOp[] op =
    {
     new DoubleOp(Operations.MulTwo),
     new DoubleOp(Operations.Square)
    };
   for( int i = 0; i < op.Length; i++ )
   {
    Console.WriteLine("使用第{0}个操作", i);
    Display(op[i], 1.5);
    Display(op[i], 3.14);
    Display(op[i], 10);
    Console.WriteLine();
   }
  }
  static void Display(DoubleOp action, double value)
  {
   double result = action(value);
   Console.WriteLine("{0}的运算结果是{1}", value, result);
  }
 }
}

C#委托的好处

某人有三子,让他们各自带一样东西出门,并带回一头猎物。
可以理解为一种父亲对儿子的委托:
猎物 办法(工具 某工具)
三个人执行委托的方法各不相同
兔子 打猎(工具 弓)
野鸡 买(工具 钱)
狼 诱捕(工具 陷阱)
委托是一个类型,用来指称所有形式相同的方法(返回值类型相同而且参数也相同)。
public delegate double Handler(double[] ds);
public double Sum(double[] ds) {//在方法中执行操作。}
public double Average(double[] ds) {//在方法中执行操作。}
委托的实例化
用new关键字(将方法名作为参数)生成一个委托对象,建立委托与方法的关联。
例:Handler handler = new Handler(Sum);使用委托可以像使用变量一样使用委托的实例。使用委托时,需要给委托按要求传递参数。
使用委托,则委托所关联的方法被调用。
例:double[] weights={1.0,2.0,3.0,4.0};
double result=handler(weights);
一个委托可以通过+运算委托关联多个方法,叫多路广播委托(对应于单路广播委托)。
如果此时使用委托,则所有的关联方法都被调用。
例:Handler handler = new Handler(Sum);
handler += new Handler(Average);
这个委托(第三方)就会去调用方法去帮你实现
委托的好处:
1.相当于用方法作为另一方法参数(类似于C的函数指针)
2.在两个不能直接调用的方法中作为桥梁,如:在多线程中的跨线程的方法调用就得用委托

时间: 2024-10-28 18:26:26

C#委托介绍与简单示例的相关文章

AngularJS基础 ng-cut 指令介绍及简单示例_AngularJS

AngularJS ng-cut 指令 AngularJS 实例 输入框的文本被剪切时执行表达式: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> </head>

PHP实现WebService的简单示例和实现步骤

 这篇文章主要介绍了PHP实现WebService的简单示例和实现步骤,本文直接给出示例代码并分步骤讲解,需要的朋友可以参考下     前段时间在webservice的问题上纠结了很长时间,本来想写在thinkphp的框架里面,可是怎么也实现不了,目前为止也仅仅是学会的没有框架的接口的开发. 在此资源共享一下步骤: 首先我创建的文件有: api.php api的接口类文件 api.wsdl 我创建产生的最后要调用的接口文件 cometrue.php 注册service api类内容的所有内容的执

安卓UI设计与开发教程 顶部标题栏(一)ActionBar详细概述和简单示例

一.ActionBar介绍 在Android 3.0中 除了我们重点讲解的Fragment外,Action Bar也是一个非常重要的交互元素,Action Bar取代了传统的tittle bar和menu,在程序运行中一直置于顶部,对于Android平板设备来说屏幕更大它的标题使用Action Bar来设计 可以展示更多丰富的内容,方便操控. 二.ActionBar的功能 用图的方式来讲解它的功能 开发教程 顶部标题栏(一)ActionBar详细概述和简单示例-actionbar隐藏标题栏"&g

php 5.6版本中编写一个PHP扩展的简单示例

 这篇文章主要介绍了php 5.6版本中编写一个PHP扩展的简单示例,本文给出扩展实现代码.编译方法.配置方法和使用例子等内容,需要的朋友可以参考下     有时候在php本身没有满足需求的api时候,需要自己写相应的扩展,扩展写完之后进行编译,即可加入自己的开发环境中,扩展php的功能. 这里实现一个连接字符串和int型数的连接操作的简单扩展. 首先,下载最新的php源码安装包,进入ext/目录,新建extstrcat.def: 代码如下: string extstrcat(string st

PHP 使用redis简单示例分享

 这篇文章主要介绍了PHP 使用redis简单示例分享,主要是给大家展示下,php使用redis的方法,有需要的小伙伴们参考下.     示例很简单,注释里也都做了说明,这里就不多废话了.   代码如下: <?php /*从平台获取数据库名*/ $dbname = ""; /*从环境变量里取host,port,user,pwd*/ $host = ''; $port = ''; $user = ''; $pwd = ''; try { /*建立连接后,在进行集合操作前,需要先进行

JS比较两个时间大小的简单示例代码

 本篇文章主要介绍了JS比较两个时间大小的简单示例代码.需要的朋友可以过来参考下,希望对大家有所帮助 如下所示:  代码如下: if (new Date(strSD.replace(/-/g, '/')) > new Date(strED.replace(/-/g, '/'))) { //开始时间大于了结束时间                 alert("时间选择有误!开始日期必须小于或者等于结束时期!");                 return false; }  

php导出word文档与excel电子表格的简单示例代码

 本篇文章主要是对php导出word文档与excel电子表格的简单示例代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 生成word的代码:  代码如下:  header("Content-type: application/octet-stream");  header("Accept-Ranges: bytes");  header('Content-type: application/doc');  header('Content-Disposit

php实现文件下载简单示例

 这篇文章主要介绍了php实现文件下载简单示例,需要的朋友可以参考下 代码如下: public function downloads($name){ $name_tmp = explode("_",$name); $type = $name_tmp[0]; $file_time = explode(".",$name_tmp[3]); $file_time = $file_time[0]; $file_date = date("Y/md",$fi

javascript通过className来获取元素的简单示例代码

 本篇文章主要是对javascript通过className来获取元素的简单示例代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 示例如下:    代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="