3

这里的代码是 X++。尽管我熟悉 C#,但我对此知之甚少。MS 说它在语法上类似于 C++ 和 C#。

无论如何,我假设下面的代码是一种方法。它有“Construct”作为关键字。

什么是构造/构造方法?构造关键字在应用于函数时会发生什么变化?另外,假设代码会创建某种无限循环,我错了吗?

我的假设是它的返回类型为“InventMovement”的方法。

static InventMovement construct(Common buffer, InventMovSubType subType = InventMovSubType::None, Common childBuffer = null)
{
    InventMovement movement = InventMovement::constructNoThrow(buffer,subType,childBuffer);

    if (!movement)
        throw error("@SYS20765");

    return movement;
}

谢谢!凯文

4

3 回答 3

7

Construct 不是 X++ 中的关键字,它只是一个调用construct返回InventMovement类的静态方法。它用于允许您创建基类的派生类,而不必知道要创建哪个派生类。这就是 AX 实现工厂模式的方式。您将在许多有抽象基类的地方看到在 AX 中使用的这种模式。

InventMovement是许多其他类的抽象基类,例如InventMov_PurchInventMov_Sales。您不能在抽象类上调用 new(),因此不必在需要创建类时new InventMov_Purch()调用switch 语句,而是使用该方法为您调用正确的 new()。new InventMov_Sales()InventMovementInventMovement::construct()

于 2009-07-10T20:29:39.723 回答
0

X++ 中没有构造关键字。consturct 习惯用法就是你如何在 X++ 中实现工厂设计模式。通常你会在继承树的基(抽象)类中找到“construct”方法,其目的是简单地构造(实例化,有时初始化)正确的子类。创建正确的子类后,construct 方法返回对已创建子类的基类引用。这称为多态性

X++ 中的构造习语(粗略地)转换为以下 C++ 伪代码:

class Base
{
public:
    static Base * construct(int aType);
    //some instance methods here
}; 

class Concrete1 : public Base
{
    // concrete implementation 1
};

class Concrete2 : public Base
{
    // concrete implementation 2
};

Base * Base::construct(int aType)
{
    switch(aType)
    {
        case 1:
            return  (Base*) new Concrete1();
        case 2:
            return (Base*) new Concreate2();
    }
}
于 2009-07-14T01:55:21.493 回答
-1

免责声明:我对 X++ 一无所知。

根据那里的示例,construct 关键字似乎正在创建一个构造函数方法。

在 C++ 中,你会有

static Foo::Foo(int arg1) { this->val = arg1 }

我的猜测是,无论出于何种原因,X++ 都需要在其构造方法中使用construct 关键字。似乎还有一个constructNoThrow关键字,它可能是一个保证不抛出异常的构造函数。

于 2009-06-26T17:47:18.913 回答