簡體   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