2010-11-27 16 views
2
class MyClas 
{ 
    public System.Windows.Point p; 
    public void f() 
    { 
     p.X = 0; 
    } 
} 

Dieser Code funktioniert einwandfrei.

Unterschied zwischen Eigenschaften und Variablen

Zugleich dies ein Übersetzungsfehler verursacht („Kann nicht den Rückgabewert von p geändert werden, da es keine Variable ist“):

class MyClas 
{ 
    public System.Windows.Point p {get; set;} 
    public void f() 
    { 
     p.X = 0; 
    } 
} 


Was ist der Unterschied?

Antwort

7

Sie verwenden eine mutable struct which is evil.

Ihr Problem ist, dass eine Eigenschaft eine Kopie der Struktur zurückgibt und keine Referenz auf das ursprüngliche Feld. Ihre Änderungen würden sich nur auf die kopierte Struktur auswirken.
In einigen einfachen Fällen (Aufrufer Setter) fängt der Compiler Ihren Fehler. In komplexen Fällen (Aufruf einer Methode, die die Struktur mutiert) wird sie vom Compiler nicht abgefangen, und Ihr Code wird automatisch fehlschlagen (d. H. Die Kopie wird modifiziert und das Original bleibt unverändert).

Die Problemumgehung verwendet p=new Point(x,y)

+0

+1: für Kopie von struct – TalentTuner

Verwandte Themen