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的消息。

  • 相关阅读:
    KindEditor粘贴word图片且图片文件自动上传功能
    umeditor粘贴word图片且图片文件自动上传功能
    百度Web编辑器粘贴word图片且图片文件自动上传功能
    PHP大文件上传支持断点上传解决方案
    PHP大文件上传支持断点上传教程
    matlab函数——shading函数
    Matlab griddata函数功能介绍
    戴尔 SE2416HM
    visio中如何旋转形状
    axios的封装与异常处理(async/await)
  • 原文地址:https://www.cnblogs.com/sylvanas2012/p/delegatejunior.html
Copyright © 2011-2022 走看看