Namespaces

Namespaces are a possibility (that you should use, but not overuse!) to structure your classes.

A sample of working code:

Customer.Item.prg

begin namespace Customer
 
class Item
 
# Class code
 
end class
 
end namespace

Supplier.Item.prg

begin namespace Supplier
 
class Item
 
# Class code
 
end class
 
end namespace

and now how to use these classes:

local oCustomerItem as Customer.Item
local oSupplierItem as Supplier.Item
 
oCustomerItem := Customer.Item{}
oSupplierItem := Supplier.Item{}

Please note that with the “using” statement you don't need to fully specify the class like in this code:

using Customer
local oItem as Item
 
oItem := oItem{}

For the compiler, it must be clear which class to use, so if you have use classes that are defined multiple times in different namespaces, you need to fully qualify them. The following code will lead to a compiler warning:

using Customer
using Supplier
 
local oCustomerItem as Item
 
oCustomerItem := Item{}

because you need to specify which class to take. The compiler has no chance to do that correctly.