Properties
Yigal Chripun
yigal100 at gmail.com
Fri Jan 9 02:47:26 PST 2009
Chad J wrote:
> Miles wrote:
>> Both the getter and the setter should return an rvalue. Properties exist
>> so that they are interchangeable with real member variables. Something
>> that is possible with member variables MUST also be possible with
>> properties, in a transparent way for any code outside the class.
>>
>
> I agree, though let's not fool ourselves, there is at least one corner case:
>
> property int foo
> {
> get{ ... }
> set{ ... }
> }
>
> auto bar =&foo;
> what happens when someone writes this?
>
> I've tried this in C# and it is simply forbidden. I am OK with this,
> though I'd love it if there was a better way.
that's solvable. as I noted in a previous post, a property seems to me
to be mainly syntax sugar for a struct like in the following snippet:
class A {
struct Prop {
int internal;
int opCall() { return internal; }
void opAssign(int value) { internal = value; }
}
public Prop prop;
...
}
void main() {
auto a = new A;
int num = a.prop;
a.prop = 9;
auto foo = &a.prop; // what happens here?
...
}
foo can be the address of "prop" (struct instance) in the above code.
this means that:
*foo = ...; is translated to *foo.opAssign(...);
and similarly: auto bar = *foo; will be auto bar = *foo.opCall();
the only issue here is what will be the type of foo if D provides the
syntax sugar for all this. maybe define such types as special property
types - for a given property "foo" in class "Bar" the type of the
property will be "Bar.__fooPropertyType".
More information about the Digitalmars-d
mailing list