Von http://csharpindepth.com/Articles/Chapter8/PropertiesMatter.aspx
using System;
struct MutableStruct
{
public int Value { get; set; }
public void SetValue(int newValue)
{
Value = newValue;
}
}
class MutableStructHolder
{
public MutableStruct Field;
public MutableStruct Property { get; set; }
}
class Test
{
static void Main(string[] args)
{
MutableStructHolder holder = new MutableStructHolder();
// Beeinflusst den Wert von holder.Field
holder.Field.SetValue(10);
// Ruft holder.Property als Kopie ab und ändert die Kopie
holder.Property.SetValue(10);
Console.WriteLine(holder.Field.Value);
Console.WriteLine(holder.Property.Value);
}
}
1) Warum wird eine Kopie (von Property?) gemacht?
2) Wenn ich den Code zu holder.Field.Value
und holder.Property.Value = 10
ändere, erhalte ich den untenstehenden Fehler. Das hat mich wirklich umgehauen.
Der Rückgabewert von 'MutableStructHolder.Property' kann nicht verändert werden, da es keine Variable ist
Warum sollte es jemals verboten sein, einen Wert innerhalb einer Eigenschaft zuzuweisen?!? Beide Eigenschaften sind get
/set
!
Und schließlich WARUM würde man jemals das in 1 und 2 erwähnte Verhalten wollen? (Das ist mir nie passiert, ich habe immer nur Eigenschaften mit get verwendet).
Bitte erklären Sie es ausführlich, ich kann mir nicht vorstellen, jemals das 2. und noch weniger das erste zu wollen. Es ist einfach so merkwürdig für mich.