2009-06-26 45 views
3

這裏的代碼是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; 
} 

謝謝! Kevin

回答

8

構造不是X ++中的關鍵字,這僅僅是一種稱爲construct的靜態方法,它返回一個InventMovement類。它用於允許您創建基類的派生類,而無需知道要創建哪個派生類。這是AX如何實現工廠模式。您會在許多有抽象基類的地方看到這種模式在AX中使用。

InventMovement是許多其他類的抽象基類,例如InventMov_PurchInventMov_Sales。您不能在抽象類上調用new(),因此每次需要創建InventMovement類時,您都可以使用InventMovement::construct()方法爲您調用正確的new(),而不是通過switch語句調用new InventMov_Purch()new InventMov_Sales()

-1

免責聲明:我對X ++一無所知。

根據那裏的例子,似乎construct關鍵字正在創建構造函數方法。

在C++中,你不得不

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

我的猜測是,無論出於何種原因,X ++要求在其構造方法構建關鍵字。它也似乎有一個constructNoThrow關鍵字,這可能是一個構造函數,保證不會拋出異常。

+0

真的不能用常理;-) – 2009-06-26 17:49:31

0

X ++中沒有構造關鍵字。 構造成語這是您如何在X ++中實現工廠設計模式。 通常您會在繼承樹的基類(抽象)類中找到'構造'方法,其目的是簡單地構造(實例化並且有時是初始化)正確的子類。在創建了正確的子類之後,構造方法返回一個基類引用給已經創建的子類。這被稱爲多態性

X中的結構成語++(rougly)轉換爲下面的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(); 
    } 
} 
相關問題