今天在博客圆首页看到一篇文章:《C# 白话系列之——白话委托》

http://www.cnblogs.com/djangochina/p/3410002.html#commentform

首先,基于看这篇文章的时候有一些疑问我于是写一篇文章来释疑

OK,LET’S GO

先看代码:

public string GetMessage(string messageType)
{
string ret = ""; switch (messageType)
{
case "error":
ret = "错误消息";
break;
case "warning":
ret = "警告消息";
break;
default:
ret = "未知消息";
break;
}
return ret;
}
这段代码之前说了一句:现在我们有如下一个方法,怎样把这个方法可以赋值给一个变量呢?
于是在此我便疑惑了,为什么要把一个委托赋值给一个变量?赋值给这个变量有什么必要?用于什么场景?
delegate string MessageDelegate(string messageType);
public void Test()
{
MessageDelegate myMessage = GetMessage; string ret = myMessage("error");
}
代码如上,这就是我不明白的。因为在我看来,这段代码如果要赋值给一个变量很简单
string ret = GetMessage("errro");
这样调用就可以,为何还一定要赋值给一个委托再来处理呢?

好了,接下来我们看下面的示例:
void MethodWithCallback(string param1, string param2, SampleDelegate callback)
{
callback("The string is:" + (param1 + param2).ToString());
}
这是一个方法,接下来我们再看下我们定义的委托:
public delegate void SampleDelegate(string message);
接下来实现该委托的方法:
public void DelegateMethod(string message)
{
Response.Write(message);
}

从上面这个示例来看,把一个委托赋值给一个变量这个场景是基本很少的。

而当我们希望传两个参数就希望执行某个方法的时候这个场景对于委托来说有着更多的作用

现在在来看下我们平时传两个参数希望执行某个方法时是如何调用的:

void Method(string param1, string param2)
{
Callback("The string is : " + (param1 + param2).ToString());
} public void Callback(string message)
{
Response.Write(message);
}

好了,就到这里吧。至此卖萌结束!!!

欢迎各位评论,同时有反对的请尽量给个理由,好改正问题

《C# 白话系列之——白话委托》读后记的更多相关文章

  1. C# 白话系列之——白话委托

    今天看到首页有个委托的文章,但大都写的太专业,而且没有实用的例子场景.正好昨天做了一个有关委托的功能,所以也来凑个热闹,用白话掰掰 一.委托是什么 我们都知道数据类型,简单点的如,想给一个变量赋值整数 ...

  2. [转]大白话系列之C#委托与事件讲解(三)

    本文转自:http://www.cnblogs.com/wudiwushen/archive/2010/04/21/1717378.html [我希望大家在看完文章的时候,多做做练习,自己也可以想个场 ...

  3. JavaScript进阶系列06,事件委托

    在"JavaScript进阶系列05,事件的执行时机, 使用addEventListener为元素同时注册多个事件,事件参数"中已经有了一个跨浏览器的事件处理机制.现在需要使用这个 ...

  4. 委托、Lambda表达式、事件系列05,Action委托与闭包

    来看使用Action委托的一个实例: static void Main(string[] args) { int i = 0; Action a = () => i++; a(); a(); C ...

  5. 委托、Lambda表达式、事件系列03,从委托到Lamda表达式

    在"委托.Lambda表达式.事件系列02,什么时候该用委托"一文中,使用委托让代码简洁了不少. namespace ConsoleApplication2 { internal ...

  6. 大白话系列之C#委托与事件讲解大结局

    声明:本系列非原创,因为太精彩才转载,如有侵权请通知删除,原文:http://www.cnblogs.com/wudiwushen/archive/2010/04/20/1698795.html 今天 ...

  7. 并发系列5-大白话聊聊Java并发面试问题之微服务注册中心的读写锁优化【石杉的架构笔记】

  8. 白话系列之实现自己简单的mvc式webapi框架

    前言:此文为极简mvc式的api框架,只当做入门api的解析方式,并且这里也不算是mvc框架,因为没有view层,毕竟现在大部分都属于前后端分离,当然也可以提供view层,因为只是将view当做文本返 ...

  9. 并发系列4-大白话聊聊Java并发面试问题之公平锁与非公平锁是啥?【石杉的架构笔记】

随机推荐

  1. hdu 4719 动态规划

    思路:dp[i]表示到第i个点为结尾能获得的最大值,那么dp[i]=h[i]*h[i]+dp[i-x]-h[i-x];(i-l<=x<=i);那么我们可以转换下,以dp[i]-h[i]为新 ...

  2. ASP.NET多线程下使用HttpContext.Current

    本来要实现asp.net下使用tcp通讯方式向服务器获取数据,开始采用的方式是 参考: ASP.NET多线程下使用HttpContext.Current为null解决方案 http://www.cnb ...

  3. asp.net MVC EF Where 过滤条件怎么写

    做.Net开发的肯定都知道.Net Sql语句有个SqlParameter 一般用来做过滤判断逻辑写,那么到了EF 了还有这样的写法嘛?答案肯定是有的了,这里我只是把最粗糙和简单的写法罗列一些,具体封 ...

  4. web服务器内置对象,或者说是ServletAPI的实例

    final javax.servlet.jsp.PageContext pageContext; javax.servlet.http.HttpSession session = null;   // ...

  5. 瀑布流布局--原生JavaScript

    HTML(注意包裹关系,方便js调用) <body> <div id="main"> <div class="box"> & ...

  6. MVC 增删改查

    MVC内部的增删改查语句都是用Lambda表达式写成的,因此要想使用MVC内部的增删改查就要学会写Lambda表达式. 这里拿表Train来仅作研究: //声明一个表Train的上下文对象 AirSy ...

  7. 通过Scrapy抓取QQ空间

    毕业设计题目就是用Scrapy抓取QQ空间的数据,最近毕业设计弄完了,来总结以下: 首先是模拟登录的问题: 由于Tencent对模拟登录比较讨厌,各个防备,而本人能力有限,所以做的最简单的,手动登录后 ...

  8. lua定时器与定时任务的接口设计

    在所有的服务器编程当中,定时任务永远是一个不可或缺的需求.最直接的需求就是,每天凌晨0点0分的时候总是有一大堆的各种精力重置.怎么来设计这个接口呢,想了几个方案: 每秒触发 每分钟触发 每整点触发 每 ...

  9. 解决PHP中file_get_contents抓取网页中文乱码问题

    根据网上有朋友介绍说原因可能是服务器开了GZIP压缩. 下面是用firebug查看我的博客的头信息,Gzip是开了的. 请求头信息原始头信息 代码如下 复制代码 Accept text/html,ap ...

  10. File.Create创建文件后,需要释放资源

    if (!File.Exists(SavePath)) { File.Create(SavePath).Close(); }