恶补ASP.NET基础【1】委托
委托(delegate)是一种可以把引用存储为函数的类型。
委托的声明类似于函数,但不带函数体,且要使用delegate关键字,委托的声明指定了一个返回类型和一个参数列表。
在定义了委托之后,就可以声明该委托的变量。接着把这个变量初始化未与委托有相同返回类型和参数列表的函数引用。之后,就可以使用委托变量调用这个函数,就想该变量是一个函数一样。
using System; namespace TestDelegate
{
class Program
{
delegate double ProcessDelegate(double param1, double param2); static double Multiply(double param1, double param2)
{
return param1 * param2;
} static double Divide(double param1, double param2)
{
return param1 / param2;
} static void Main(string[] args)
{
ProcessDelegate process;
double input1 = 10.0;
double input2 = 2.0; string input = Console.ReadLine(); if (input == "*")
{
process = new ProcessDelegate(Multiply);
}
else
{
process = new ProcessDelegate(Divide);
} Console.WriteLine("Result:{0}",process(input1,input2)); Console.ReadKey();
}
}
}
当实例化委托时,参数是函数名,而当使用的时候,把委托实例名称作为函数名使用了,而此时规律是,委托类型和函数的返回值和参数列表一致。
如果把函数的参数列表改一个,就出现编译时错误。
错误 1 “Multiply”的重载均与委托“TestDelegate.Program.ProcessDelegate”不匹配
使用委托的四部曲:
- 定义一种委托类型
- 委托执行时要调用方法
- 定义一个委托实例
- 委托实例的调用
我知道在.Net中事件都是通过委托来实现的,那我找个例子。.NET中经常使用的控件Button,当我们把Button 控件 drap and drop到界面,然后双击界面的Button我们发现程序中自动生成了一个响应Button的事件方法,然后我们给事件方法添加Code之后,当我们点击该Button就响应该方法了,但我们没有看到代码中有任何的委托和事件之类的定义,其实这些.NET都已经做好了。我们可以查看如下文件。


图2事件委托实现
其中,EventHandler就是一个代理类型,可以认为它是一个“类”,是所有返回类型为void,具备两个参数分别是object sender和EventArgs e,第一个参数表示引发事件的控件,或者说它表示点击的那个按钮。通过以下的代码我们细细解析一下。
private void button1_Click(object sender, EventArgs e)
{ //获取被点击Button的实例 Button objBotton = sender as Button; if (objBotton != null) { objBotton.Text = "Hello you click me."; objBotton.AutoSize = true; } else { //Exception Handle. } }
恶补ASP.NET基础【1】委托的更多相关文章
- 恶补ASP.NET基础【1】枚举和结构
有时我们希望变量提取的是一个固定集合中的值,此时就可以用枚举类型, 例: enum OpenMode : byte { 新增=, 编辑=, 查看= } class Program { static v ...
- 要开始恶补Layer4-7 TCP/IP相关的姿势了,今天立个Flag
今天开区域销售会,被老板K了一顿大的!(:/手动委屈:) 说产品出来这么久,怎么没看到你们的跟接触客户的使用报告记录,一年快到头了,试用客户才个位数?你们了解自己的产品吗,然后轮着上去一个个做功能演示 ...
- Linux回归篇-基础恶补
前言: LINUX在之前仅仅了解一些皮毛知识,最近计划深入研究大数据,LINUX当然少不了,所以借此良机将LINUX也顺带添加进入学习的目录之中.为了知识的全面性,本文先恶补一下LINUX的基础,作 ...
- 第九十六篇:恶补JS基础
好家伙,来补基础啦,补JS的基础 先来一些概念性的东西 1.什么是JavaScript? javaScript的简写形式就是JS,一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态 ...
- 恶补web之一:html学习(1)
发现以前欠下的web知识太多鸟,只有重头开始好好学吧,恶补第一站就是html知识啦! html指的是超文本标记语言,它不是编程语言,而是一种标记语言;标记语言是一套标记标签(markup tag),h ...
- C#基础系列——委托和设计模式(二)
前言:前篇 C#基础系列——委托实现简单设计模式 简单介绍了下委托的定义及简单用法.这篇打算从设计模式的角度去解析下委托的使用.我们知道使用委托可以实现对象行为(方法)的动态绑定,从而提高设计的灵活性 ...
- [.net 面向对象编程基础] (21) 委托
[.net 面向对象编程基础] (20) 委托 上节在讲到LINQ的匿名方法中说到了委托,不过比较简单,没了解清楚没关系,这节中会详细说明委托. 1. 什么是委托? 学习委托,我想说,学会了就感觉简 ...
- (转)asp.net基础-HttpModule
HttpModule是向实现类提供模块初始化和处置事件.当一个HTTP请求到达HttpModule时,整个ASP.NET Framework系统还并没有对这个HTTP请求做任何处理,也就是说此时对于H ...
- ASP.NET基础之HttpHandler学习
ASP.NET基础之HttpHandler学习 经过前两篇[ASP.NET基础之HttpModule学习]和[ASP.NET基础之HttpContext学习]文章的学习我们对ASP.NET的基础内容有 ...
随机推荐
- Python之路第十二天,高级(6)-paramiko
paramiko 一.安装 pip3 install paramiko 二.使用 SSHClient 用于连接远程服务器并执行基本命令 1. 基于用户和密码链接 import paramiko # 创 ...
- 【0】python核心编程,第二章
1.print语句也支持将输入重定向到文件,示例: logfile = open('/tmp/mylog.txt', 'a') print >> logfile, 'Fatal error ...
- New Start!
博客连续搬了几个地方,从一开始的网易lofter,到点点,再到后来新浪sae自己搭建,折腾了很久,都因为各种原因没有坚持写博. 想了想,其实说到底还是因为懒,根本原因是自己没有毅力.什么不能贴代码,不 ...
- 基于方法的LINQ语句
LINQ中的查询方法有两站,一种是使用类似于SQL语句的方式,另一种则是基于方法的语句.基于方法的查询方法使用的是C#中面向对象概念的,主要的方法有: 投影: Select | SelectMany ...
- mysqlbackup
mysqlbackup 使用学习 1.设置数据库用户的相关权限 '; grant reload,replication client,super,process on *.* to backupuse ...
- Linux下find与grep指令的相关用法
find命令 find命令的一般形式 find命令的常用选项及实例 find与xargs grep命令 grep命令的一般形式 grep正则表达式元字符集(基本集) grep命令的常用选项及实例 1. ...
- android继续学习相关
最近不是很忙,但是慢慢就忘记了学习. 我总是选中了一条路后,怀疑它的正确性.我也知道这不好. 一年前,我买了一个ipad,然后玩app上的游戏,觉得很好玩,而且上面很多都是收费的, 当时就觉得,为什么 ...
- HttpClient工具类
HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议. ...
- JAXB
注解
JAXB(Java API for XML Binding),它提供了一个便捷的方式高速Java对象XML转变.于JAX-WS(Java的WebService规范之中的一个)中,JDK1.6 自带的版 ...
- jquery中this与$this的区别
来源:http://www.jb51.net/article/19738.htm jQuery中this与$(this)的区别 $("#textbox").hover( funct ...