Properties: a.b.c = 3
Michel Fortin
michel.fortin at michelf.com
Thu Jul 30 19:16:39 PDT 2009
On 2009-07-30 15:32:58 -0400, "Nick Sabalausky" <a at a.a> said:
> C# shows us *A* solution. Doesn't mean we can't do one better.
>
> The whole point of properties is that, to the outside observer, they behave,
> as much as possible, like plain fields. Obviously this can't be done in all
> cases (like getting an int* from &myIntProp), but in this case:
>
> widget.sizeAsAStructField.width = 10; // Works
> widget.sizeAsAStructProp.width = 10; // Doesn't work
>
> ...we absolutely can fix that even if C# doesn't.
I'm undecided about what to do here.
But I'd like to note that while common in our current examples,
assignment to a member of the returned struct is *one* thing that can
change the struct. Any function taking a non-const reference to the
struct can also change it. For instance, let's add a call to a mutator
for the size struct of your example:
widget.sizeAsStructProp.increaseBy(10, 10);
In this case, you'll also want the compiler automatically call the
setter once it's done. And that doesn't apply only to member functions,
you could define it a standalone function taking a ref to the struct
and call it that way:
increaseSizeBy(widget.size.sizeAsStructProp, 10, 10);
In all those cases, you'll want to call the setter back once the struct
has been modified.
Don't take this as an argument for or against automatically setting the
modified struct property value; I'm just pointing out that operators
(and specially the assignment operator) isn't the only way to change a
value. Assuming the non-mutator functions take a const ref to the
struct, the compiler should be able to avoid setting back the property
value when it's not necessary.
--
Michel Fortin
michel.fortin at michelf.com
http://michelf.com/
More information about the Digitalmars-d
mailing list