c# delegate委托 和 event 时间 用法 快速体验
之前只会使用c 或者java 来编写简单逻辑的程序,就是大家学编程语言必学的函数调用、普通运算、再加上某些算法等等。但是在实际项目中,这些肯定是不够的。经常都会在别人的代码里面看到一堆奇形怪状的代码。最近用c#用的比较多,c#里面灵活的用法很多,今天就先小试一下delegate 和 event 的用法。
下面简单介绍一下入门,从而能够快如上手。要想深入理解,要需要自己多动手实践。
delegate 委托类似于 C++ 中的函数指针。用法很简单。
比如你申明一个委托:
class Test
{
public delegate int DelegFunc(string s);
}
然后我们可以用申明的委托去定义变量,例如 DelegFunc myFunc; myFunc具体是哪个函数,可以动态的分配:
class Test
{
public delegate int DelegFunc(string s);
public int GetLeng(string s)
{return s.Length;}
publlic static void Main(string[] s)
{
DelegFunc myFunc = new DelegFunc(GetLeng);
myFunc("lianjx love music");
}
}
或者使用lambda 表达式来制定委托函数的内容:
DelegFunc myFunc = str=>{return str.Length;};
这样显得牛逼一点吧。
event,即事件机制,我觉得就是委托的回调用法,这种委托可以同时关联一个以上的函数,即用 += 算符不断关联回调函数。
先上一个简单例子:
namespace Practice { delegate void WordHandler(object sender,EventArgs e); class People { public Thing life = new Thing(); public People() { life.wordEvent += new WordHandler(MakePairs); life.wordEvent += new WordHandler(MakeForever); } void MakePairs(object sender,EventArgs e) { Thing s = (Thing)sender; Console.WriteLine("{0} love {1}",s.boy,s.girl); } void MakeForever(object sender, EventArgs e) { Thing s = (Thing)sender; Console.WriteLine("{0} and {1} last forever.",s.boy,s.girl); } } class Thing { public string boy; public string girl; public event WordHandler wordEvent; public void Comeup(string boy, string girl) { this.boy = boy; this.girl = girl; if (wordEvent != null) { wordEvent(this, null); } } } }
Thing类里面有一个委托函数 wordEvent, 它的值可以在别的类里面制定。
People类里面给Thing的wordEvent制定了关联的函数。
Thing一旦有新事物到来,执行了Comeup()函数,然后Comeup()函数激发wordevent事件。Thing并不知道wordEvent执行了什么。wordEvent 自动地把消息传给了People. 这样就实现了People监听Thing的消息。
posted on 2012-06-18 15:33 leavingseason 阅读(2658) 评论(0) 编辑 收藏 举报