Properties: a.b.c = 3

Chad J chadjoan at __spam.is.bad__gmail.com
Wed Jul 29 10:29:40 PDT 2009


Ary Borenszweig wrote:
> Andrei Alexandrescu wrote:
>> Kagamin wrote:
>>> Andrei Alexandrescu Wrote:
>>>
>>>> Kagamin wrote:
>>>>> Andrei Alexandrescu Wrote:
>>>>>> The question is very simple: given that we're used with a
>>>>>> specific semantics for a.b.c = 3, how can we address the fact
>>>>>> that the semantics of this familiar operation is so different
>>>>>> (and likely so useless) when properties replace fields?
>>>>> You're solving problems that never came to life. Well... only as
>>>>> syntetic examples.
>>>> IMHO it's quite the contrary, a.b.c = 3 is a very simple and
>>>> concrete problem that emphatically shows we haven't gotten
>>>> properties up to snuff.
>>>
>>> Never saw this problem in C#.
>>
>> Of course you didn't. This is because C# doesn't have it - their
>> structs can't define properties.
>>
>> Andrei
> 
> Yes they can. And also C# shows us the solution to the problem (similar
> to what Walter proposed).
> 
> ---
> public class Bar
> {
>     public Foo Foo { get; set; }
> }
> 
> public struct Foo
> {
>     public int Property { get; set; }
> }
> 
> Bar bar = new Bar();
> Foo foo = new Foo();
> foo.Property = 10;
> bar.Foo = foo;
> 
> bar.Foo.Property = 20; // line 16
> ---
> 
> Error on line 16: Cannot modify the return value of 'Bar.Foo' because it
> is not a variable

What about something like "array.length++;"?

It's a very similar problem, but not quite the same.  Generalizes to all
unary operators I think.



More information about the Digitalmars-d mailing list