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  阅读(2655)  评论(0编辑  收藏  举报

导航

Bye!