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); }
运行结果