[英]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_Purch
和InventMov_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.