C# 委托和方法
委托是一种特殊的引用类型,它将方法也作为特殊的对象封装起来,从而将方法作为变量或参数进行传递
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# 委托和方法的更多相关文章
- 【转】第5篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+委托回调方法分析
作者: 牛A与牛C之间 时间: 2013-11-19 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第5篇:Xilium CefGlue 关于 CLR Object 与 JS ...
- 【转】第4篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:委托回调方法分析
作者: 牛A与牛C之间 时间: 2013-11-18 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第4篇:Xilium CefGlue 关于 CLR Object 与 JS ...
- 委托、Lambda表达式、事件系列04,委托链是怎样形成的, 多播委托, 调用委托链方法,委托链异常处理
委托是多播委托,我们可以通过"+="把多个方法赋给委托变量,这样就形成了一个委托链.本篇的话题包括:委托链是怎样形成的,如何调用委托链方法,以及委托链异常处理. □ 调用返回类型为 ...
- 阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:9. 自定义委托事件方法
文档目录: 说明 1. 连接阿里云物联网 2. IoT 客户端 3. 订阅Topic与响应Topic 4. 设备上报属性 4.1 上报位置信息 5. 设置设备属性 6. 设备事件上报 7. 服务调用 ...
- Lambda表达式的演化,委托-匿名方法-Func-Lambda
匿名方法 很多时候委托接收的方法是一次性的或者方法体是非常简单的... 例三: 我们可以写成: 有没有发现我们每次都要定义委托,很多时候签名可能是一样的.这样就没有必要定义重复的. 然后又过了很久很久 ...
- c#委托把方法当成参数
//定义委托,它定义了可以代表的方法的类型 public delegate void GreetingDelegate(string name); /// <summary> /// 用英 ...
- 委托-异步调用-泛型委托-匿名方法-Lambda表达式-事件【转】
1. 委托 From: http://www.cnblogs.com/daxnet/archive/2008/11/08/1687014.html 类是对象的抽象,而委托则可以看成是函数的抽象.一个委 ...
- C#多线程+委托+匿名方法+Lambda表达式
线程 下面是百度写的: 定义英文:Thread每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线程.进程也可能是整个程序或者是部分程序的动态执行.线程是一组指令的集合,或者是程序的特殊段,它 ...
- lambda 委托 匿名方法
委托: delegate是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类.与其它的类不同,delegate类能够拥有一个签名(signature),并且它只能持有与它的签名相匹配的方法的 ...
随机推荐
- Ubuntu eclipse :An error has occurred. See the log file
安装eclipse: sudo apt-get install eclipse-platform 调整java: sudo update-alternatives --config java 启动: ...
- 快速美眉(FastMM)使用手记
今天在SourceForge下到了FastMM (Fast Memory Manager),听说比官方的内存管理快多了,试了一下,果然不错.目前最新的是4.27. 就我的使用范围来说,我就是想看看我的 ...
- substr,substring,slice 的区别
javascript中的三个函数substr,substring,slice都可以用来提取字符串的某一部分(函数名称都是小写,不要写成subStr,subString又或者Substring,记住js ...
- [Leetcode][Python]22: Generate Parentheses
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 22: Generate Parentheseshttps://oj.leet ...
- c#读取xml文件配置文件Winform及WebForm-Demo具体解释
我这里用Winform和WebForm两种为例说明怎样操作xml文档来作为配置文件进行读取操作. 1.新建一个类,命名为"SystemConfig.cs".代码例如以下: < ...
- 使用rowid和rownum获取记录时要注意的问题
我们知道.rowid和rownum在Oracle中都是能够被当做伪劣使用的,主要用来定位表中特定的记录,但它们是有差别的,rowid是和行记录的物理地址相应的.而rownum则不是,是通过返回的记录集 ...
- OkHttp–支持SPDY协议的高效HTTP库
Android为我们提供了两种HTTP交互的方式: HttpURLConnection 和 Apache HTTP Client,虽然两者都支持HTTPS,流的上传和下载,配置超时,IPv6和连接池, ...
- Mac上小巧实用的GIF格式录屏软件 LICEcap
LICEcap 是一款小巧使用的Mac屏幕录制软件,它以GIF格式来录制屏幕内容,用户可以自定帧率和录制范围.这样就能控制生成文件的大小,非常便捷实用哦.点击进入下载 <ignore_js_op ...
- BZOJ 1901: Zju2112 Dynamic Rankings( 树状数组套主席树 )
裸的带修改主席树.. 之前用BIT套Splay( http://www.cnblogs.com/JSZX11556/p/4625552.html )A过..但是还是线段树好写...而且快(常数比平衡树 ...
- nodejs取得mac地址
1.背景 使用nodejs取得客户端电脑的mac地址作为唯一的标识,但如何使用getmac模块, 本文结合网上资料和实践,总结如下: 2.需要的moduel ...