Laden...

Objekt auf Standardinstanz prüfen

12 Antworten
1,082 Aufrufe
Letzter Beitrag: vor 15 Jahren
Objekt auf Standardinstanz prüfen

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?

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

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();

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

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.

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

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.

loop:
btst #6,$bfe001
bne.s loop
rts