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