zoukankan      html  css  js  c++  java
  • .NET中,对委托的理解。

    以前很少接触委托,这两天做自定义控件,发现委托很有用,于是又复习了一遍委托,整理出来,以便以后复习。
    其实在我的理解里,委托也是一个类,是一种特殊的数据类型。因为委托存储的是对方法的引用。这句话不知道大家能否理解,举个例子吧:比如我要出差需要做火车,但是我不知道有那几趟火车,于是我在出差申请表中填写“做火车(2人)”。看到这个申请表后,订票员就会定好火车票,而我不用关心细节问题。这就是一个简单的委托。我委托订票员定火车票,而我只要提出要求(2人)即可。
    通过上面的例子,不知道大家是否有点概念。下面举个例子。
    using System;

    namespace delegeteTest
    {          
            class delegeteClass
             {   
                 public delegate void fHandler(int a);     //关键-此行可以看成类的声明
                 public  fHandler f0;   //实例化一个委托,此时f0相当于一个方法
                 public void d(int a,int b )
                 {
                    int c=a+b;
                    f0(c);     //处理委托实例
                 }
             }

            class test
            {
                  public void output(int mun)
                    {
                        System.Console .WriteLine ("{0}",mun);
                    }
      
                 [STAThread]
                 static void Main(string[] args)
                  {
                       test t=new test ();
                       delegeteClass dc=new delegeteClass ();//定义delegeteClass类的实例
                       dc.f0 =new  delegeteTest.delegeteClass.fHandler (t.output);//实例的初始化
                       dc.d(2,3);
                  }
           }
    }
    通过上面的例子,可以发现public delegate void fHandler(int a);实际上相当于一个类。
    当dc.f0 =new  delegeteTest.delegeteClass.fHandler (t.output);//进行初始化时,相当于f0方法执行t.output方法。
    其中output方法的参数和返回值必须与fHandler相同。

  • 相关阅读:
    【数据库】事务,ACID,CAP和一致性
    线程,进程。多进程,多线程。并发,并行的区别
    mysql 集群 数据同步
    如何读取一个表的表类型,以及读取一个表中字段的类型.
    网络攻击技术开篇——SQL Injection
    MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?
    程序员找工作那些事(一)幸存者偏差
    程序员
    preg_replace的一些细节
    HDU 1258 Sum It Up(dfs 巧妙去重)
  • 原文地址:https://www.cnblogs.com/ami/p/455339.html
Copyright © 2011-2022 走看看