zoukankan      html  css  js  c++  java
  • C#之委托概念认识学习笔记

    回调函数是一项非常有用的编程机制,它在程序设计界的应用已有很多年了。Microsoft。NET框架使用一种称作委托(delegate)的技术来提供回调函数机制。与其他平台中使用的回调机制不同,委托为我们提供了更多的功能。例如,委托可以确保回调方法是类型安全的(这是通用语言运行时最重要的目标之一)。委托还集成了按序调用方法的能力,并且同时支持调用静态方法和实例方法。

    认识委托

          C语言运行时中的qsort就是利用回调函数来对一个数组中的元素进行排序的。在windows中,窗口过程、钩子过程、异步过程调用等都要求使用回调函数。在.NET框架中,回调方法也用于很多场合。例如,我们可以通过登记回调方法来获得各种各样的通知,如未处理的异常、窗口状态的改变、菜单项目的选中、文件系统的变更以及异步操作的完成等。

          在非托管C/C++中,函数的地址就是一个内存地址。该地址不会携带任何额外的信息,例如函数期望的参数个数、参数类型、函数的返回值类型以及函数的调用约定。一言以避之,非托管C/C++中的回调函数时非类型安全的。

          在.NET框架中,回调函数仍然像在非托管windows编程中一样有用和普遍。但是,.NET框架为回调函数提供了一种称为委托(delegate)的类型安全的机制。在详细讨论委托之前,首先向大家展示一下他们的使用方法。下面的代码演示了怎样声明、创建和使用委托。

    using System;

    using System.Windows.Forms;

    using System.IO;

    class Set{

       private Object[] items;

             public  Set(Int32 numItems){

             items=new Object[numItems];

             for(Int32 i=0;i<numItems;i++){

                   items[i]=i;

              }

              //定义一个Feedback委托类型

              //注意:该类型嵌套在Set类中

              public delegate void  Feedback(Object value,Int32 item,Int32 numItems);

              public void ProcessItems(Feedback feedback){

                       for(Int32 item=0;item<items.Length;item++){

                                if(feedback!=null){

                                    //如果指定有回调函数,则调用它们

                                    feedback(items[item],item+1,items.Length);

                                } 

                       }

              }

    }

    class App{

             static void main(){

                   StaticCallbacks();

                   InstanceCallbacks();

             }

            ...

    }

    未完待续

  • 相关阅读:
    java三层架构:持久层、业务层、表现层
    Spring:Spring JDBCTemplate & 声明式事务
    Spring:AOP
    Spring:IOC控制反转
    Mybatis: 加载策略及注解开发
    Mybatis 配置文件深入
    Mybatis:基本应用
    前后端项目接口联调
    springboot整合jsp
    IDEA出现URI is not registered (Settings | Languages & Frameworks | Schemas and DTDs)
  • 原文地址:https://www.cnblogs.com/yjrl/p/1657812.html
Copyright © 2011-2022 走看看