Possible @property compromise

Michael pr at m1xa.com
Sat Feb 2 05:57:23 PST 2013


As proposal:

class Example
{
     public int IntProperty
     {
         get; private set;
     }

     private double _internalMember;

     double FloatProperty
     {
         get out { assert(result > 0); } body { return 
_internalMember * 42; }
         set in  { assert(value != 0); } body { _internalMember = 
value + 42; }
     }
}

Resulting code:

class Example
{
     private _autoGeneratedBackMember;

     public int get_IntProperty() { return 
_autoGeneratedBackMember; }
     private void set_IntProperty(int value) { 
_autoGeneratedBackMember = value; }

     public
     {
         double get_FloatProperty() out(result) { assert(result > 
0); } body { return _internalMember * 42; }
         void   set_FloatPoperrty(double value) in { assert(value 
 > 0); } body { _internalMember = value + 42; }
     }
}

1. Rid-of @property keyword, UFCS as they now. Optional 
parentheses for UFCS with one or two parameters, not for variable 
number of arguments.
2. General behaviour like C# properties. It's about getting 
address of property, ref property, property rewrite, virtual 
property, explicit get/set methods, property with value semantic, 
exlicit calling get/set methods etc.
3. Property can be exported to libray as "<out type> 
get_<Name>(), void set_<Name>(<in type>)".
4. Get property always have only out(result) { } contract.
5. Set property always have only in { } contract.

Thanks.



More information about the Digitalmars-d mailing list