X++ in AX7: Readonly keyword


In AX7 X++ now supports the readonly keyword. Semantically it is identical to readonly in C#.

In short; it allows you to define members on a class that can only be initialized in the declaration and in the constructor.

class MyClass 
{  
    readonly str identifier = "XYZ";  
    readonly str identifier2;  

    public void new(str _identifier) 
    {  
        identifier2 = _identifier;  
    }  

    public void foo() 
    { 
        // The field 'identifier2' is read only. A value cannot be assigned to it. 
        //identifier2 = "ABC";   
    }  
}  

The big question is "when to use it?" In my opinion the actual use scenarios are limited – simply because other language constructs are still missing.

In X++ we still recommend the construct pattern and the newFrom pattern. These patterns recommend the new method to not have any parameters – readonly has little applicability, when the new method is parameter-less.

So why do we prefer parameter-less new methods?

  1. It enables serialization of classes using the pack/unpack pattern – all classes extending RunBase are subject to this.
  2. It enables the extension framework and smart customizations.

Once X++ supports getters/setters and method overloading (at least of the new method) – then readonly will become handy.

If you have a good use scenario for readonly - please share in the comments section below.

 

THIS POST APPLIES TO MICROSOFT DYNAMICS AX7 TECHNICAL PREVIEW; IS PROVIDED AS-IS AND CONFERS NO RIGHTS.

Comments (0)

Skip to main content