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 ...
随机推荐
- AS错误:Error:Execution failed for task ':gM99SDK:processReleaseResources'. > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'F:\BaiduYunDown
原因,buildToolsVersion 版本太低. 在build.gradle文件设置 buildToolsVersion 设置高一点,但必须是SDK里面有的.
- static关键字用法
java中static关键字可用于修饰: 1.属性:表示该属性变量在类被加载时即被创建并初始化,类加载过程只进行一次,因此静态变量也只被创建一次 2.方法:静态方法为类的公有方法,可直接用‘类名.方法 ...
- 原生js获取样式
js中的获取样式是在是让人头疼,为了方便兼容多个浏览器,把设置样式封装成一个函数. 函数如下: function getStyle(element, property) { var value = e ...
- Swift +AFNetworking3.0 Get
let manager = AFHTTPSessionManager() let url = "http://v.juhe.cn/weather/index" let ," ...
- IE下Debug BHO
主要就是修改注册表键值使IE不创建多个进程:HKLM\Software\Microsoft\Internet Explorer\Main - TabProcGrowth 但需要注意的是这种情况下,vs ...
- Device Tree Usage( DTS文件语法)
http://elinux.org/Device_Tree_Usage Device Tree Usage Top Device Tree page This page walks throu ...
- iOS删除本地文件
以前在博客里记录的东西都是截屏,没有插入代码,今天进去一看,图片都不显示了,只好重新插入代码,发现以前写的文件操作这块,没有写本地文件删除这个功能,重新再记录一下 //需要删除文件的物理地址 NSSt ...
- sublime text 也能矩形选择
原来用editplus,但发现sublime text后便果断选择这个,她真的是很完美,但有一点就是不能像editplus一样矩形选择(Ctrl+鼠标左键这我知道,但感觉很麻烦)而感到小小的不爽... ...
- c#winform如何通过控件名查找控件
//根据控件名称查找控件 //作用根据控件的配置项目, Control[] myfindcs = this.Controls.Find("button4", true); if ( ...
- ActiveMQ学习笔记之异常
1.PUT was not successful: 404 Not Found 结果:jetty.xml中开启BlobMessage相关配置 2.Consumer消费时:FileNotFoundExc ...