委托是一种特殊的引用类型,它将方法也作为特殊的对象封装起来,从而将方法作为变量或参数进行传递

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace ConsoleApplication1
{
delegate void DualFunction(double x,double y);
class Program
{
static void Main()
{
DualFunction fun1;
double a = 2.5, b = ;
Console.WriteLine("请选择函数(加0减1乘2除3):");
int i = int.Parse(Console.ReadLine());
if (i == )
fun1 = new DualFunction(Sub);
else if (i == )
fun1 = new DualFunction(Mul);
else if (i == )
fun1 = new DualFunction(Div);
else
fun1 = new DualFunction(Add);
fun1(a, b);
Console.ReadLine();
}
static void Add(double x,double y)
{
Console.WriteLine("{0}+{1}={2}", x, y, x + y);
}
static void Sub(double x,double y)
{
Console.WriteLine("{0}-{1}={2}", x, y, x - y);
}
static void Mul(double x,double y)
{
Console.WriteLine("{0}*{1}={2}", x, y, x * y);
}
static void Div(double x,double y)
{
Console.WriteLine("{0}/{1}={2}", x, y, x / y);
}
}
}

DaulFunction fun1=new DualFunction(Sub);

DualFunction fun1=Sub;//这两种方式也行

还可以将委托对象放在数组中  比如

static void Main()
{
DualFunction[] funs = new DualFunction[] { Add, Sub, Mul, Div };
double a=2.5, b=2.0;
Console.WriteLine("请选择函数(加0减1乘2除3):");
int i = int.Parse(Console.ReadLine());
funs[i](a, b);
Console.ReadLine();
}

一个委托对象还可以封装多个方法   委托对象的合并和删除  比如DualFunction fun1 = funs[1] + funs[2];

C# 委托和方法的更多相关文章

  1. 【转】第5篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+委托回调方法分析

    作者: 牛A与牛C之间 时间: 2013-11-19 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第5篇:Xilium CefGlue 关于 CLR Object 与 JS ...

  2. 【转】第4篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:委托回调方法分析

    作者: 牛A与牛C之间 时间: 2013-11-18 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第4篇:Xilium CefGlue 关于 CLR Object 与 JS ...

  3. 委托、Lambda表达式、事件系列04,委托链是怎样形成的, 多播委托, 调用委托链方法,委托链异常处理

    委托是多播委托,我们可以通过"+="把多个方法赋给委托变量,这样就形成了一个委托链.本篇的话题包括:委托链是怎样形成的,如何调用委托链方法,以及委托链异常处理. □ 调用返回类型为 ...

  4. 阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:9. 自定义委托事件方法

    文档目录: 说明 1. 连接阿里云物联网 2. IoT 客户端 3. 订阅Topic与响应Topic 4. 设备上报属性 4.1 上报位置信息 5. 设置设备属性 6. 设备事件上报 7. 服务调用 ...

  5. Lambda表达式的演化,委托-匿名方法-Func-Lambda

    匿名方法 很多时候委托接收的方法是一次性的或者方法体是非常简单的... 例三: 我们可以写成: 有没有发现我们每次都要定义委托,很多时候签名可能是一样的.这样就没有必要定义重复的. 然后又过了很久很久 ...

  6. c#委托把方法当成参数

    //定义委托,它定义了可以代表的方法的类型 public delegate void GreetingDelegate(string name); /// <summary> /// 用英 ...

  7. 委托-异步调用-泛型委托-匿名方法-Lambda表达式-事件【转】

    1. 委托 From: http://www.cnblogs.com/daxnet/archive/2008/11/08/1687014.html 类是对象的抽象,而委托则可以看成是函数的抽象.一个委 ...

  8. C#多线程+委托+匿名方法+Lambda表达式

    线程 下面是百度写的: 定义英文:Thread每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线程.进程也可能是整个程序或者是部分程序的动态执行.线程是一组指令的集合,或者是程序的特殊段,它 ...

  9. lambda 委托 匿名方法

    委托: delegate是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类.与其它的类不同,delegate类能够拥有一个签名(signature),并且它只能持有与它的签名相匹配的方法的 ...

随机推荐

  1. Ubuntu eclipse :An error has occurred. See the log file

    安装eclipse: sudo apt-get install eclipse-platform 调整java: sudo update-alternatives --config java 启动: ...

  2. 快速美眉(FastMM)使用手记

    今天在SourceForge下到了FastMM (Fast Memory Manager),听说比官方的内存管理快多了,试了一下,果然不错.目前最新的是4.27. 就我的使用范围来说,我就是想看看我的 ...

  3. substr,substring,slice 的区别

    javascript中的三个函数substr,substring,slice都可以用来提取字符串的某一部分(函数名称都是小写,不要写成subStr,subString又或者Substring,记住js ...

  4. [Leetcode][Python]22: Generate Parentheses

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 22: Generate Parentheseshttps://oj.leet ...

  5. c#读取xml文件配置文件Winform及WebForm-Demo具体解释

    我这里用Winform和WebForm两种为例说明怎样操作xml文档来作为配置文件进行读取操作. 1.新建一个类,命名为"SystemConfig.cs".代码例如以下: < ...

  6. 使用rowid和rownum获取记录时要注意的问题

    我们知道.rowid和rownum在Oracle中都是能够被当做伪劣使用的,主要用来定位表中特定的记录,但它们是有差别的,rowid是和行记录的物理地址相应的.而rownum则不是,是通过返回的记录集 ...

  7. OkHttp–支持SPDY协议的高效HTTP库

    Android为我们提供了两种HTTP交互的方式: HttpURLConnection 和 Apache HTTP Client,虽然两者都支持HTTPS,流的上传和下载,配置超时,IPv6和连接池, ...

  8. Mac上小巧实用的GIF格式录屏软件 LICEcap

    LICEcap 是一款小巧使用的Mac屏幕录制软件,它以GIF格式来录制屏幕内容,用户可以自定帧率和录制范围.这样就能控制生成文件的大小,非常便捷实用哦.点击进入下载 <ignore_js_op ...

  9. BZOJ 1901: Zju2112 Dynamic Rankings( 树状数组套主席树 )

    裸的带修改主席树.. 之前用BIT套Splay( http://www.cnblogs.com/JSZX11556/p/4625552.html )A过..但是还是线段树好写...而且快(常数比平衡树 ...

  10. nodejs取得mac地址

            1.背景        使用nodejs取得客户端电脑的mac地址作为唯一的标识,但如何使用getmac模块,        本文结合网上资料和实践,总结如下: 2.需要的moduel ...