Nick Sabalausky wrote:
"Ary Borenszweig" <[email protected]> wrote in message
news:[email protected]...
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
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 don't understand your example. What's wrong with it? What doesn't work
as you expect and what is your expected result?
In the first case, if you modify sizeAsAStructField.width, it's ok and
should compile, because you are modifying sizeAsAStructField itself, not
a copy of it. In C#:
public struct Foo
{
public int Property { get; set; }
}
public class Bar
{
public Foo Foo;
}
static Main()
{
Bar bar = new Bar();
Foo foo = new Foo();
foo.Property = 10;
bar.Foo = foo;
bar.Foo.Property = 20;
// prints 20, as expected
Console.WriteLine(bar.Foo.Property);
}