繁体   English   中英

将构造关键字添加到方法时会做什么?

[英]What does the construct keyword do when added to a method?

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

无论如何,我认为下面的代码是一种方法。 它以“构造”作为关键字。

什么是构造/构造方法? 构造关键字应用于函数时会发生什么变化? 另外,我是否认为代码会创建某种无限循环是错误的?

我的假设是它的返回类型为“ 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;
}

谢谢! 凯文

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

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

X ++中没有构造关键字。 构造习语就是您在X ++中实现Factory 设计模式的方式 通常,您会在继承树的基类(抽象)中找到“ 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();
    }
}

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

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

在C ++中,您将拥有

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

我的猜测是,无论出于何种原因,X ++都需要在其构造方法上使用Construct关键字。 似乎还存在一个ConstructNoThrow关键字,该关键字大概是保证不会引发异常的构造函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM