上节课学了第十二章Delegates & Events, 我想简单说说我的收获。Delegate,即委托,用于将事件与其动作和方法关联起来,有点类似于C++中的函数指针。举个简单的创建delegate的例子:

delegate int Sample(int x, int y)             这里定义了delegate方法、Sample的返回值和签名。        

class Class2

{                                                            
      public int method( int x, int y )
      {       return x*y;      }
}

 

class Class1                                              这里是调用delegate的构造方法生成mySample实体
{
     static void Main(string[] args)
     {
       Class2 instance = new Class2();
       Sample mySample
              = new Sample(instance.method);
       int result = mySample( 2, 3 );
       Console.WriteLine( result );
     }
}              

这是老师ppt中的重点内容,以下是我下课的实践:

class Program
    {
        static void OtherClassMethod(){
            Console.WriteLine("Delegate an other class's method");
        }

        static void Main(string[] args)
        {
            var test = new TestDelegate();
            test.delegateMethod = new TestDelegate.DelegateMethod(test.NonStaticMethod);
            test.delegateMethod += new TestDelegate.DelegateMethod(TestDelegate.StaticMethod);
            test.delegateMethod += Program.OtherClassMethod;
            test.RunDelegateMethods();
        }
    }

    class TestDelegate
    {
        public delegate void DelegateMethod();  //声明了一个Delegate Type

        public DelegateMethod delegateMethod;   //声明了一个Delegate对象

        public static void StaticMethod()   
        {
            Console.WriteLine("Delegate a static method");
        }

        public void NonStaticMethod()   
        {
            Console.WriteLine("Delegate a non-static method");
        }

        public void RunDelegateMethods()
        {
            if(delegateMethod != null){
                Console.WriteLine("---------");
                delegateMethod.Invoke();    
                   Console.WriteLine("---------");
            }
        }
    }
我自己感觉其与C++中函数指针还是有一定的区别的,主要有三个方面:
1)一个delegate对象一次可以搭载多个方法(methods),而不是一次一个。
2)一个delegate对象所搭载的方法并不需要属于同一个类别。
3)与函数指针不同,委托是面向对象,类型安全并且安全的。
  



  以上是我这次学习的内容,希望老师和大神们多多指教,