C# und Referenzen auf eigene Objekte

{Eve}

Mitglied
Hallo,

ich habe eine grundsätzliche Frage bezgl. C# Referenzen auf eigene Objekte.

Es gibt ja 3 Möglichkeiten Objekte auf Gleichheit zu überprüfen (keine Strings):
1. Methode ReferenceEquals der Klasse Object
2. Equals der Klasse Object
3. == Operator

Alle 3 Möglichkeiten vergleichen eigene Objekte (z.B. eine eigene Klasse Auto)
in Bezug auf die Referenz des Objektes -> also ob es sich um die gleiche Instanz der Klasse handelt (gleicher Speicherbereich).

Falls ich jetzt nicht auf die Referenz vergleichen möchte
sondern auf den Wert der Attribute der Objekte so
muss ich die Funktionen in der Klasse überladen.

Habe ich das so richtig verstanden?

Weiterhin:
Wenn ich folgende Funktion habe:

Code:
Auto GetAutoById(string strId)
{
	foreach(Auto cAuto in ListeMitAutoObjekten)
	{
		if(cAuto.strId == strId)
		{
			return cAuto;
		}
	}
}
Gibt mir die Funktion dann eine Referenz auf das Objekt zurück oder eine Kopie?

Ich hoffe ich habe mich halbwegs verständlich ausgedrückt.

Gruss
 
Hallo!

Ja, das hast Du richtig verstanden. Durch das Überladen der equals-Methode in Deiner eigenen Klasse kannst Du einen Vergleich aller von Dir gewünschten Attribute vornehmen.

viele Grüsse

Thomas.
 
== Operator und Equals Methode kannst du ja überschreiben, das heißt also nicht das du automatisch auf die gleiche Referenz drauf zu greifst.
Besagt im Grunde nur die Typen sind gleich.

Es gibt da im übrigen auch noch die SchnittstelleIEquatable.

Und wenn du Equals überschreibst musst du auch die GetHashCode Methode überschreiben.
Dieser Code wird in erster Instanz überprüft, ist der gleich zwischen 2 Objekten wird mit Equals weiter geprüft.
 
Weiterhin:
...
Wenn ich folgende Funktion habe:
Code:
Auto GetAutoById(string strId)
{
	foreach(Auto cAuto in ListeMitAutoObjekten)
	{
		if(cAuto.strId == strId)
		{
			return cAuto;
		}
	}
}
Gibt mir die Funktion dann eine Referenz auf das Objekt zurück oder eine Kopie?

Hallo Eve,
hier wird die Referenz zurückgegeben.

Gruß
Col.Blake
 
Zuletzt bearbeitet:
Wäre die Frage nicht eher, ist Auto ein struct oder class?

structs sind Wertetypen, du bekommst eine Kopie zurück
classes sind Referenztypen, du bekommst eine Referenz zurück.
 
Zurück