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.

Reply via email to