On Wed, Jul 29, 2009 at 10:44 AM, Ary Borenszweig<[email protected]> 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
Booom, exactly what I said about rvalues.
