Eigene ValueTypen als Eigenschaften ?

13/05/2008 - 14:30 von Dieter Pelz | Report spam
Hallo,

macht es eigendlich Sinn eigene Valuetypen in Eigenschaften zu kappseln?


z.B.
Beim folgenden Beispiel wírd CS1612 ausgelöst. Wenn in UseVector auf die
Eigenschaft verzichtet wird sondern Vector als Member veröffentlich gibt es
keine Probleme.
Sollten eigene ValueTypen überhaupt noch in Eigenschaften gekappselt werden?

class Program
{
public struct Vector
{
private double _x;
public double X
{
get { return _x; }
set { _x = value; }
}
//... Y...Z
}

public class UseVector
{
private Vector _Vector;
public Vector Vector
{
get { return _Vector; }
set { _Vector = value; }
}
}

static void Main(string[] args)
{

UseVector value = new UseVector();

value.Vector.X = 100.0; // Fehler CS1612: Der Rückgabewert
"ConsoleApplication12.Program.UseVector.Vector" kann nicht geàndert werden,
da er keine Variable ist.

Console.WriteLine("Wert ist {0}", value.Vector.X);


}
}

Danke
Dieter
 

Lesen sie die antworten

#1 Kurt Grassl
23/05/2008 - 11:26 | Warnen spam
Dieter Pelz schrieb:
Hallo,

macht es eigendlich Sinn eigene Valuetypen in Eigenschaften zu kappseln?




Nach der Empfehlung von MS in der Hilfe müsstest Du ein Zwischenwert
machen. Statt

value.Vector.X = 10.0

also

var temp = value.Vector;
temp.X = 10.0;

Dabei wird natürlich nicht _Vector in UseVector geàndert, sondern eben
nur temp.

Wenn allerdings _Vector geàndert werden soll, darfst Du

value.Vector = temp;

nicht vergessen... dann ist aber evtl. das Problem nicht die Kapselung
in einer Eigenschaft, sondern dass Vector kein Werttyp sein sollte.

Zitat aus "Richtlinien für das Framework-Design" (entgegen dem Namen ist
das Buch nicht nur für Framework-Ersteller interessant) [Hervorherbungen
sind von mir]:

"Definieren Sie keine Struktur, wenn der Typ _nicht_sàmtliche_ folgenden
Merkmale aufweist:
* Er steht logisch für einen einzigen Wert, àhnlich wie primitive Typen
(int, double usw.)
* Seine Instanzen sind kleiner als 16 Byte.
* _Er_ist_unverànderlich_
* Er muss nicht oft durch Boxing konvertiert werden.
* In allen andern Fàllen sollten Sie Ihre Typen als Klassen definieren.
"

Viele Grüße
Kurt

Ähnliche fragen