Question about operations on class/struct properties

Uranuz via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Aug 18 08:35:25 PDT 2014


I think there is something that I don't understand about concept 
of *properties*. I thing that property is sort of object 
attribute that belongs to it. Currently property considered as 
two functions: *get* and/or *set*. So we can do two sort of 
operations on concept that called *property*: *assign to it* and 
*read it*. If property doesn't return reference value all other 
manipulations are forbidden. A will illustrate it with example:

import std.datetime, std.stdio;

void main()
{
	auto date = Date(1991, 5, 7);
	//date.day += 5; //Not working
	//date.day++;  //Not working
	date.day = date.day + 1;
}

Because day property is of ubyte (not reference) type, we can 
only read it into some other variable or assign to it, but other 
other operations couldn't be done.

It is a common case when I want to increment, decrement or using 
some other 'op=' - operation, but it is not working and I get 
compile-time error. I always was thinking that

date.day++;
date.day -= 5;

Should be treated as:

date.day = date.day + 1;
date.day = date.day - 5;

if the were not oveloaded. So if we have get and set property 
methods I see that it could be calculated and this should working.

Of course I can define return value of get property as *ref* but 
in this case I don't understand how I should use it with *setter* 
method.

It's interesting to see any thinkings about it.


More information about the Digitalmars-d-learn mailing list