c#中的事件
namespace DelegateTest
{
public delegate string MyStringProcDelegate(string str);
class MyStringProc
{
public string ProcString(string str,MyStringProcDelegate strProcDelegate)
{
return strProcDelegate(str);
}
}
}
在调用的时候实例化这个类,再调用对应的方法。如下:
namespace DelegateTest
{
class Program
{
static void Main(string[] args)
{
MyStringProc msp = new MyStringProc();
string str1=msp.ProcString("I am good.", StringToLower);
string str2 = msp.ProcString("I am good too", StringToUpper);
Console.WriteLine("{0},{1}",str1,str2);
Console.ReadKey();
}
static string StringToLower(string str)
{
return str.ToLower();
}
static string StringToUpper(string str)
{
return str.ToUpper();
}
}
}

class Program
{
static void Main(string[] args)
{
MyStringProc msp = new MyStringProc();
MyStringProcDelegate strProcDelegate;
strProcDelegate = StringProc1;
strProcDelegate += StringProc2;
msp.ProcString("I am a good boy",strProcDelegate);
Console.ReadKey();
} static string StringProc1(string str)
{
str= "["+str+"]";
Console.WriteLine(str);
return str;
}
static string StringProc2(string str)
{
str= "{" + str + "}";
Console.WriteLine(str);
return str;
}
}
输出如下:

以上并没有达到完全封装,本例用到的MyStringProcDelegate类型的委托变量是可以封装在MyStringProc类中,客户端直接调用该类的方法即可,无需再声明委托变量。如下:
public delegate string MyStringProcDelegate(string str);
class MyStringProc
{
public MyStringProcDelegate strProcDelegate;
public string ProcString(string str)
{
if (strProcDelegate!=null)
str=strProcDelegate(str);
return str;
}
}
调用代码如下:
class Program
{
static void Main(string[] args)
{
MyStringProc msp = new MyStringProc();
msp.strProcDelegate = StringProc1;
msp.strProcDelegate += StringProc2;
msp.ProcString("I am a good boy");
Console.ReadKey();
}
static string StringProc1(string str)
{
str= "["+str+"]";
Console.WriteLine(str);
return str;
}
static string StringProc2(string str)
{
str= "{" + str + "}";
Console.WriteLine(str);
return str;
}
}
输出如下:


public delegate string MyStringProcDelegate(string str);
class MyStringProc
{
public event MyStringProcDelegate strProcDelegate;
public string ProcString(string str)
{
if (strProcDelegate != null)
str = strProcDelegate(str);
return str;
}
}
调用方法如下:
class Program
{
static void Main(string[] args)
{
MyStringProc msp = new MyStringProc();
msp.strProcDelegate += StringProc1;
msp.strProcDelegate += StringProc2;
msp.ProcString("I am a good boy");
Console.ReadKey();
}
static string StringProc1(string str)
{
str= "["+str+"]";
Console.WriteLine(str);
return str;
}
static string StringProc2(string str)
{
str= "{" + str + "}";
Console.WriteLine(str);
return str;
}
}
输出如下:




c#中的事件的更多相关文章
- C++中的事件分发
本文意在展现一个C++实现的通用事件分发系统,能够灵活的处理各种事件.对于事件处理函数的注册,希望既能注册到普通函数,注册到事件处理类,也能注册到任意类的成员函数.这样在游戏客户端的逻辑处理中,可以非 ...
- javascript中的事件冒泡和事件捕获
1.事件冒泡 IE 的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档).以下面的HTML ...
- jQuery文本框中的事件应用
jQuery文本框中的事件应用 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht ...
- 怎么理解js中的事件委托
怎么理解js中的事件委托 时间 2015-01-15 00:59:59 SegmentFault 原文 http://segmentfault.com/blog/sunchengli/119000 ...
- jQuery中的事件绑定方法
在jQuery中,事件绑定方法大致有四种:bind(),live(), delegate(),和on(). 那么在工作中应该如何选择呢?首先要了解四种方法的区别和各自的特点. 在了解这些之前,首先要知 ...
- 四、jquery中的事件与应用
当用户浏览页面时,浏览器会对页面代码进行解释或编译--这个过程实质上是通过时间来驱动的,即页面在加载时,执行一个Load事件,在这个事件中实现浏览器编译页面代码的过程.时间无论在页面元素本身还是在元素 ...
- ActiveX(二)Js 监听 ActiveX中的事件
在上一篇随笔:ActiveX(一)第一个简单的Demo 中,已经可以实现 js 单向调用 ActiveX 中的方法,在很多情况下ActiveX中的方法的执行时相对耗时.耗性能的.在这样的情况下.Act ...
- jQuery:详解jQuery中的事件(二)
上一篇讲到jQuery中的事件,深入学习了加载DOM和事件绑定的相关知识,这篇主要深入讨论jQuery事件中的合成事件.事件冒泡和事件移除等内容. 接上篇jQuery:详解jQuery中的事件(一) ...
- jQuery:详解jQuery中的事件(一)
之前用过一些jQuery的动画和特效,但是用到的部分也不超过10%的样子,感觉好浪费啊——当然浪费的不是jQuery,而是Web资源.后来就想深入研究下jQuery的内部机理,读过两遍jQuery源代 ...
- DOM中的事件对象
三.事件对象事件对象event1.DOM中的事件对象(1).type:获取事件类型(2).target:事件目标(3).stopPropagation() 阻止事件冒泡(4).preventDefau ...
随机推荐
- HTML5和CSS3基础教程(第8版)-读书笔记
第1章 网页的构造块 一个网页主要包括以下三个部分: n 文本内容(text content):在页面上让访问者了解页面内容的纯文字. n 对其他文件的引用(referen ...
- POJ3694 Network
题目大意:已知连通图G有N个点m条无向边,有Q次操作,每次操作为增加一条边,问每次操作后图上有几个桥. 如果添加一条边进行Tarjin搜索一次时间复杂度为m*m*q很大,会超时.真的超时,我试过.看了 ...
- jsp学习---使用jsp和JavaBean实现超简单网页计算器
一.需求 如题,用jsp实现一个超简单的网页计算器. 二.实现 1.效果图 1)初始界面: 2)随便输入两个数进行相乘: 3)当除数为零时提示报错: 2.代码 Calculator.java pack ...
- gtest vs2015配置
1. 下载gtest https://github.com/google/googletest 2. 解压文件 使用vs2015 打开googletest-master\googletest\msvc ...
- Unicode explorer
It can be cumbersome to work out some of the details of this by hand, so you can use the little Java ...
- 自动化运维工具之ansible(转)
原文链接:http://os.51cto.com/art/201409/451927_all.htm
- 本地Mac如何搭建IPv6环境
http://blog.csdn.net/dancen/article/details/51595374 这篇文章写的很详细,借鉴用啦-
- 工作中遇到的小问题: 做弹幕从数据库取出东西均匀插入marquee中,
function getFloatContent() { var method = 'GETFLOATCONTENT'; $.ajax({ url: 'api/zhenqiapi.php', data ...
- SQlserver 行转列
列转行编程中很容易碰到,小弟在此总结下, 行转列暂时还没遇到,遇到再补充. 列转行: , , , , 以上都是以逗号分隔,分隔符可以自定义.
- UIView.FRAMEWORK
uiview .framework 有太多 属性到现在基本上没怎么接触,今天开始用到了就纪录一下,有空在去了解了: [self.view bringToFront:btn] 把btn 放到self.v ...