zoukankan      html  css  js  c++  java
  • 作业五

          上节课学了第十二章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)与函数指针不同,委托是面向对象,类型安全并且安全的。
      



      以上是我这次学习的内容,希望老师和大神们多多指教,
  • 相关阅读:
    用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。
    用一条SQL语句显示所有可能的比赛组合
    查询表A中存在ID重复三次以上的记录
    统计numpy数组中最频繁出现的值
    有两个表A和B,均有key和value两个字段,如果B的key在A中也有,就把B的value替换为A中对应的value
    距离和相似度
    NumPy 中的集合运算
    模式识别、机器学习傻傻分不清?给我三分钟!
    NTP服务器方案介绍
    NTP网络时钟原理及应用
  • 原文地址:https://www.cnblogs.com/lixuntaohaolihai/p/4442220.html
Copyright © 2011-2022 走看看