在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
之前只会使用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的消息。 |
请发表评论