hallo!
ich hab mal wieder ein kleines problem bei dem ich nicht weiter komme.
ich habe mehrere objekte vom selben typ, die mit dem standardkonstruktor erstellt werden.
alle werte(properties) sind dabei null bzw. leer.
wie kann man prüfen, ob das objekt noch in diesem zustand ist, ohne dabei z.b. inotifypropertychanged zu verwenden?
Hallo KingPin,
schreibt dir eine Methode in der Klasse des Objekts, die das prüft.
BTW: Vermutlich meinst du Standard_zustand_ und nicht Standard_instanz_.
herbivore
ok..
hab es leider befürchtet;)
also irgendwas was vom framework implementiert ist gibt es also nicht...
Hallo KingPin,
richtig, dafür gibt es nichts.
herbivore
Angenommen, ich setze eine Property auf irgendeinen Wert und danach wieder auf null.
Ist das Objekt dann immer noch im Standardzustand (in Deinem Kontext)?
Anders formuliert: Geht es Dir darum, zu wissen, ob überhaupt schon einmal irgendwas damit gemacht wurde, oder nur darum, ob alle Properties die gleichen Werte wie ein neu initialisiertes Objekt aufweisen?
mir ist es hierbei egal ob sich was verändert und wieder auf den anfagswert zurückgesetzt wird.
ich will nur feststellen können, ob das objekt immer noch den selben zustand hat, den der standardkonstruktor hergestellt hat.
Dann ist es doch relativ simpel:
Equals, == und != überladen, und zusätzlich eine Methode IsInInitialState oder so einführen, in der folgender Code drinsteht:
return this == new MyType();
sagt mir jetzt wo mein fehler liegt oder der unterschied drin ist... aber ich versteh das nicht ganz...
DateTime d = new DateTime();
bool l = d.Equals( new DateTime());
kommt true dabei raus....
aber wenn ich jetzt eine LinqToSql-Klasse nehme, bekomm ich false
rptCustomers c = new rptCustomers();
bool l = c.Equals(new rptCustomers());
mit == ist es das gleiche...
DateTime ist eine Struktur (und somit ein Valuetype), rptCustomers ist eine Klasse (und somit ein Referenztyp).
Du musst Equals explizit überschreiben, zudem solltest Du auch == und != überschreiben.
ergänzend: bei referenztypen prüft eqals standardmäßig auf die referenz der instanz und nciht auf den inhalt der instanz.
Hallo KingPin,
weshalb ich schon oben (indirekt) auf den Unterschied zwischen Standardinstanz und Standardzustand hingewiesen habe.
herbivore
Equals, == und != überladen, und zusätzlich eine Methode IsInInitialState oder so einführen, ...
Falls die Klasse immutable ist würde ich das noch erweitern um ein public readonly Field namens "Empty", dann kann man auf die gleiche Art und Weise prüfen wie bei String.Empty und Guid.Empty.