zoukankan      html  css  js  c++  java
  • AX 2012使用委托

    AX2012加入了一个新的概念,delegate(委托),如果学习过.net的同志,对委托应该有很深刻的认识。

    参照C#中委托的定义:委托是用来处理其他语言(如 C++、Pascal 和 Modula)需用函数指针来处理的情况的。不过与 C++ 函数 指针不同,委托是完全面对对象的;另外,C++ 指针仅指向成员函数,而委托同时封装了对象实例和方法。

    参照C#中委托的作用:在C#中委托主要有三个作用,实现委托功能,实现回调函数功能,实现事件功能。具体的功能说明请参照vs的帮助文档。

    当然说这么多主要目的是为了抛砖引玉,介绍一个委托是个什么东西,在AX2012当中,功能和用法都差不多。

    现在我以一个简单的加减乘除的例子讲解委托在AX2012当中的用法。

    首先,定义类CalculateDelegate

    //class  definition
    class SalesTableTypeDelegate
    {
    
    }
    //add method
    public static void MyHandlerADD(int i,int j)
    {
        ;
        info(int2str(i+j));
     }
    
    //Divide
    public static void MyHandlerDivide(int i,int j)
    {
        info(int2str(i/j));
    }
    
    //Multiply
    public static void MyHandlerMultiply(int i,int j)
    {
        ;
        info(int2str(i*j));
    }
    
    //Subtract
    public static void MyHandlerSubtract(int i,int j)
    {
        info(int2str(i-j));
    }

    如果不适用委托的话,我们需要同时调用这四个方法(加减乘除)我们就必须在main函数里分别的调用

    static void main(Args _args)
    {
    
        CalculateDelegate s;
        ;
    
        CalculateDelegate::MyHandlerADD(2,3);
        CalculateDelegate::MyHandlerDivide(2,3);
        CalculateDelegate::MyHandlerMultiply(2,3);
        CalculateDelegate::MyHandlerSubtract(2,3);
    }

    运行结果

    如果使用委托的话

    我们需要定义一个委托和执行委托的方法

    delegate void MyDelegate(int i,int j)
    {
    
    }
    public void AddStaticHandler()
    {
        ;
    
        this.MyDelegate += eventhandler(CalculateDelegate::MyHandlerMultiply);
        this.MyDelegate += eventhandler(CalculateDelegate::MyHandlerADD);
        this.MyDelegate += eventhandler(CalculateDelegate::MyHandlerDivide);
        this.MyDelegate += eventhandler(CalculateDelegate::MyHandlerSubtract);
      
    }
    static void main(Args _args)
    {
    
        CalculateDelegate s;
        ;
        
        s = new CalculateDelegate();
        
        s.AddStaticHandler();
        s.MyDelegate(2,3);
    }

    运行结果

  • 相关阅读:
    CentOS7 安装 Mysql 服务
    git 第一次 push 遇到问题
    为什么PHP(CLI)同一个错误信息会打印两次?
    python密码输入模块getpass
    Linux安装JDK详细步骤
    嘿嘿嘿,开始自学mysql
    Bable实现由ES6转译为ES5
    AJAX
    模板层
    lshw查看系统硬件信息
  • 原文地址:https://www.cnblogs.com/dingkui/p/2667554.html
Copyright © 2011-2022 走看看