fun with properties
teo
teo.ubuntu at yahoo.com
Wed Mar 23 09:09:34 PDT 2011
On Wed, 23 Mar 2011 08:28:46 -0600, Kai Meyer wrote:
> On 03/23/2011 06:48 AM, teo wrote:
>> How can I use properties with increment/decrement and +=/-= operators?
>>
>> I did following tests (the errors are from dmd v2.052):
>>
>> class T
>> {
>> private int _x;
>> @property
>> public int x() { return _x; }
>> }
>>
>> void main()
>> {
>> int[] a;
>> // case #1.1
>> a.length++; // Error: a.length is not an lvalue // case #1.2
>> a.length += 1; // Ok
>>
>>
>> auto t = new T();
>> // case #2.1
>> t.x++; // Error: t.x() is not an lvalue // case #2.2
>> t.x += 1; // Error: 't.x' is not a scalar, it is a @property
>> int()
>> // Error: incompatible types for ((t.x) += (1)):
>> '@property int()' and 'int'
>> // case #2.3
>> t.x()++; // Error: t.x() is not an lvalue // case #2.4
>> t.x() += 1; // Error: t.x() is not an lvalue
>> }
>>
>> Basically I want to change the value of a member variable, which is
>> accessed only through a property.
>> It looks like that is partially possible with the length property of
>> dynamic arrays although they probably are implemented in a different
>> way.
>
> You need a "write" property:
>
> @property
> {
> public int x() { return _x; } // Read property public void
> x(int x1) { _x = x1; } // Write property
> }
>
I've already tried that, but to no avail. I am getting the errors stated
above. Can you give me a complete working example please?
More information about the Digitalmars-d-learn
mailing list