Nur statische Felder ohne Objektverweis aufrufbar C#?
Hi,
beim Programieren bin ich darauf gestoßen dass nur Statische Felder/Methoden/Eigenschaften ohne einen Objektverweis aufrufbar sind, sprich wenn z.B. ein meiner Klasse eine Liste namens 'Objekte' und deklariere sie als public, kann ich aus einer anderen Klasse nicht auf sie zugreifen ohne die Liste statisch oder ein Objektverweis zu machen.
Debug.Log(Class1.Objekte[0]);
//funktioniert nicht
Class1 Objektverweis = new Class1();
Debug.Log(Objektverweis.Objekte[0]);
//funktioniert
Wieso ist das so?
1 Antwort
Du benötigst bei einem nicht statischen Objekt auch immer einen Objektverweis.
Mach dir das mal an einem Beispiel klar:
Du hast eine Klasse Auto und möchtest damit beispielhaft mal einen Fuhrpark einer Firma abbilden. Der Fuhrpark besteht aus drei unterschiedlichen Autos. Jedes Auto hat also auch einen eigenen Motor mit unterschiedlichen Werten wie der Leistung in kW. Wenn du nun eine Klasse Auto implementierst und darin wiederum eine Methode, welche dir Angaben zum Motor macht (z.B. GetLeistung), dann muss der Compiler natürlich auch wissen, um welchen Motor handelt es sich? Du brauchst erst einmal ein Objekt Auto, und darauf kannst du dann GetLeistung aufrufen, um von diesem Auto die Leistung zu erfragen.
Was soll der Compiler tun, wenn du
Auto.GetLeistung(); //funktioniert nicht
aufrufst, ohne, dass du ein Auto angelegt hast und keine Angaben zum Motor gemacht hast?
Du musst erst eine Objektinstanz erzeugen und kannst dann für das Objekt die Methode aufrufen:
Auto bmw = new Auto("BMW X5", 110);
Debug.Log(bmw.GetLeistung());
Die Methode GetLeistung ist dann natürlich auch eine nicht statische Methode (also nicht das Schlüsselwort static verwenden). Ebenso darf das Attribut bzw. Feld Leistung nicht als static deklariert sein.
Du musst dich beim implementieren der Klasse Auto natürlich schon fragen, welche Attribute statisch sind und welche nicht. Attribute, welche für jedes Auto gleich sind, können grundsätzlich statisch sein. Dabei kannst du dann auch die Methode ohne Objektinstanz aufrufen. Attribute, welche bei jedem Auto anders sein können, dürfen nicht statisch sein und sind immer an eine Objektinstanz gebunden.