zoukankan      html  css  js  c++  java
  • 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的消息。

  • 相关阅读:
    理解SynchronizationContext,如何在Winform里面跨线程访问UI控件
    ThreadPool.QueueUserWorkItem引发的血案,线程池异步非正确姿势导致程序闪退的问题
    实战经验分享之C#对象XML序列化
    C#wxpay和alipay
    C#调用windows api 实现打印机控制
    C#winform程序关闭计算机的正确姿势
    自动化控制之线程池的使用
    自动化控制之重码校验
    (转)C#中的那些全局异常捕获
    android studio 2.32躺坑记
  • 原文地址:https://www.cnblogs.com/sylvanas2012/p/delegatejunior.html
Copyright © 2011-2022 走看看