Tag Archive for Array

Short: Arrays über Properties erreichen

Kürzlich tauchte die Frage auf, ob es gut sei, ein Array über ein Property nach außen hin erreichbar zu machen und ob dieses dann durch das Property kopiert werden würde.

Dazu erstmal etwas grundlegendes über Arrays. Auch wenn die Schreibweise so gut wie immer so oder so ähnlich aussieht wie int[] oder string[], handelt es sich immer noch um eine Instanz der Klasse Array. Demnach wird das Array beim Property als Referenz übergeben, da dies bei Klassen bekanntermaßen automatisch geschieht. Demnach ist es also kein Problem, ein Array per Property, oder auch Methode erreichbar zu machen.

Wirklich kein Problem? In Bezug auf das Kopieren, ja. Doch birgt dieses Unterfangen ganz andere Fallstricke, welche immer wieder in unbedacht geschriebenem Code zu sehen sind. Da es sich um eine Referenz handelt, muss zwar nichts kopiert werden, doch spiegelt sich auch jegliche Änderung an den Elementen des Arrays auf das interne Array zurück! Das ist gerade dann ein Problem, wenn dadurch Statusänderungen von wichtigen Objekten im Spiel möglich werden, welche eigentlich nur im Objekt selbst gehandhabt werden sollen.

Das heißt also abschließend: Es kommt immer auf den Fall an, wann man ein Array (und das gilt für alle anderen Referenz-Typen auch) nach außen hin verfügbar macht. Wenn es 100% um Performance geht, wie z.b. bei sich ständig ändernden und großen Vertex Arrays, dann ist es besser direkt das Array als Referenz zu übergeben, da das Kopieren immer viel Zeit in Anspruch nimmt. Hier sollte man auf die Vernunft des Benutzers vertrauen und bei Zweifeln evtl. eine Notiz als Kommentar hinterlegt werden. Doch wenn Performance keine Rolle spielt, sollte man lieber den Kopier-Weg vorziehen, da so das ganze System weniger fehleranfällig arbeiten kann.