Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Visual C# 2012 Grundkurs

Object

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Jeder einzelne Datentyp in C# wird von der Basisklasse Object abgeleitet und verfügt deshalb über die gleichen grundlegenden Methoden. Dadurch ist es möglich, primitive Datentypen als Objekt darzustellen.

Transkript

In diesem Abschnitt möchte ich mich der Klasse Object widmen. Es ist ja eine der eingebauten Typen in C#, d.h. ich kann jetzt z.B. so etwas schreiben: object o = new object() Damit kann ich jetzt aber im Augenblick relativ wenig anfangen. Deswegen möchte ich an einer anderen Stelle ansetzen, um mehr ein Gefühl dafür zu entwickeln, was überhaupt das Tolle daran ist. Ich mache jetzt so etwas hier. Ich deklariere eine Integer-Variable und die erhält durch irgendwelche komplizierten Berechnungen einen Wert. Jetzt können wir so etwas hinschreiben: "Die Antwort auf alles und den ganzen Rest lautet:" Und dann kann ich den Wert meiner Variablen hier mit einem Plus-Operator dranhängen. Und das ist jetzt schon eine elegante Eigenschaft dieser Klasse String. Also, ich habe hier einen String und ich kann jetzt hier mit Plus hinhängen, was ich lustig bin. Jetzt ist die Frage: Wie kommt das? Wie ist das überhaupt möglich? Die Antwort auf diese Frage erschließt sich über IntelliSense. Wenn ich jetzt dieses I mal nehme und nach dem I einen Punkt schreibe, dann stelle ich fest, dass also diese winzige Integer-Variable über Methoden verfügt. Jetzt fragt sich natürlich: Wo kommen diese Methoden her? Die Antwort auf diese Frage ist, dass alles in .NET, und damit auch alles in C#, also jeder einzelne Datentyp, ein Objekt ist, das letztendlich von Object abgeleitet ist. Also, um es umzudrehen: Es gibt keinen Typ in .NET und C#, der nicht von .NET abgeleitet wäre. Und damit verfügt jeder Typ in .NET und C# über diese grundlegenden Methoden. Jetzt muss ich natürlich ein bisschen zurücksteuern, weil hier nämlich Methoden drin sind, die kommen daher, dass I ein numerischer Typ ist. Die Methoden, um die es sich handelt, die von Object herkommen, das ist Equals, GetHashCode, GetType und ToString. Das sind eigentlich die wichtigen Methoden. Und die sind also wie gesagt jetzt für jedes Element vorhanden. Und jetzt ist es so – ich mach das mal gerade weg hier – und ich sage, ich möchte jetzt hier die String-Repräsentation der Variablen I wissen. Es ist also jetzt das I, aber jetzt als String. Man sieht den Unterschied nicht, aber wir wissen es, weil wir eben hier explizit ToString aufgerufen haben. Das ist genau der Grund, warum es sich die Klasse String erlauben kann, dass es mit dem Pluszeichen jedes x-beliebige Objekt an sich dranhängen kann. Die String-Klasse geht dabei ganz einfach vor: Wenn das, was hier folgt, ein String ist, dann werden halt einfach die beiden Strings aneinandergehängt. Und wenn das, was danach folgt also diese Variable, die hier folgt etwas anderes als ein String ist, dann wird einfach die Methode ToString aufgerufen und das, was als Resultat zurückkommt, das wird dann da übergeben. Und auf diese Weise kommt jetzt die Variable I hier zu diesen Methoden ToString und Equals und GetHashCode und wie auch immer sie heißen mögen. Aber was passiert jetzt eigentlich, wenn ich hier eine neue Klasse anlege? Class Mitarbeiter String Vorname irgendwas, was weiß ich, was da noch folgt. Und ich kann jetzt hier so einen Mitarbeiter "M" mal anlegen. Und jetzt hänge ich hier so einen Mitarbeiter dran. Und die Frage ist, was passiert, wenn ich das Ganze starte? Also, da ist die Antwort auf alles jetzt Object.Mitarbeiter. Das ist schon ein bisschen seltsam. Die Antwort auf die Frage, warum das so ist, die liegt darin, dass für alle Klassen dieses ToString zunächst so implementiert ist, dass der Typ der Klasse übergeben will. Und dieses Verhalten kommt wiederum von der Klasse Object. Also ich habe ja vorhin dieses object o = new object() mal hingeschrieben und wenn ich jetzt hier dieses "O" dranhänge und den Code wieder ausführe, dann sehe ich hier System.Object. Also d.h., die Methode ToString ist in Object eben genau so implementiert worden. Wenn Sie jetzt hier irgend etwas anderes drin haben wollen, dann müssen Sie das auch entsprechend auch programmieren. Also kann ich jetzt hier in der Klasse "Mitarbeiter" mit dem Overwrite-Schlüsselwort die Methode ToString nach meinem Gusto überschreiben. Jetzt kann ich z.B. sagen: Return Vorname + Leerzeichen + Nachname. Da würde jetzt natürlich nicht viel Interessantes kommen, also initialisiere ich die jetzt mal ganz kurz. Das würde ich normalerweise über einen Konstruktor natürlich machen, aber in dem Fall möchte ich jetzt einfach nur schnell mal eine Lösung haben, damit ich das Beispiel weiterführen kann. Also, und hier hänge ich jetzt wieder das M hinten dran. Jetzt starte ich die ganze Sache wieder. Also, der Mitarbeiter wird ja jetzt sozusagen hier wieder an diesen String drangehängt und wir wollen alle sehen: Was kommt dabei raus? Und jetzt kommt tatsächlich das raus, was hier in dieser ToString-Methode übergeben wurde. Jetzt fragen Sie sich wahrscheinlich zurecht, wenn wir zum ersten Beispiel noch mal zurückgehen: Ist denn jeder fitzelchen-kleine Integer im System gleich ein Objekt mit einer großen Tabelle der Funktionen? Und ich weiß aber auch nicht, was alles noch dazugehört, um jetzt diese ganzen Funktionen aufrufbar zu machen. Da lautet die Antwort wiederum "Nein". Diese primitiven numerischen Datentypen sind zunächst einmal auf dieser Basis nichts anderes als -- I ist ein 32 Bit Wert. Das benutzt genau 32 Bit vom Speicher. Aber: Wenn es an dem Punkt hinkommt, dass ich jetzt hier so eine Methode von I verwenden möchte, dann passiert etwas. Das nennt sich Boxing. D.h., diese Variable I als Integer wird in eine Schachtel reingesteckt. Diese Schachtel, die ist ein Objekt. Das Objekt hat jetzt diese ganzen Methoden. Das können wir auch leicht sehen. Also ich kompiliere das Ganze jetzt noch einmal und dann gehen wir mal hier in den Explorer zu dem entsprechenden Projekt und jetzt mache ich mal einfach so einen Trick. Ich benenne diese Exe-Datei in eine DLL um. Dann kann ich nämlich mit der rechten Maustaste nämlich den ILDASM öffnen, mit dem wir uns anschauen können, was da ja jetzt genau kompiliert worden ist. Das ist unser Code, unsere Main-Methode jetzt in IL. Und hier ist genau der Aufruf, der uns interessiert. Also, es wird zunächst mal die Variable I hier erzeugt, also wird der Wert 42 erzeugt. Der wird an einer bestimmten Stelle gespeichert, Store Location heißt dieser Befehl. Und das ist die Location Null und jetzt holt man sich von dieser Location Null wieder den Wert und sagt: Pack mir den in eine Schachtel. Jetzt wird eine Typangabe dazugegeben und dieser Typ ist System.Int32. Und dieser Typ, der ist jetzt sozusagen der Schachteltyp für diesen Integer-Wert. Und in diesem System.Int32-Typ, da ist auch diese ToString-Methode definiert, die uns diesen Wert 42 als String zurückgibt oder welchen Wert auch immer. Und erst nachdem dieser Integer-Wert geboxt ist, wird dann von der Methode System.String die Methode Concat aufgerufen. Also Concat heißt ja auf Deutsch "zusammenhängend". Man sieht, es ist diese Form der Methode, die zwei Objekte als Parameter erwartet. Deswegen funktioniert der ganze Kram. Weil eben dieses I geboxt worden ist und dann ein Objekt ist. Und dann ein Objekt mit dieser String-Funktion Concat verarbeitet werden kann. Halten wir also fest für diesen Abschnitt: Jeder Datentyp in .NET und damit auch jeder Datentyp in C# ist letztlich ein Object und kann die gesamte Funktionalität von Object benutzen. Die numerischen Typen die primitiven Typen, wie Integer, double unsigned Integer, Decimal die müssen aber geboxt werden, also in eine Schachtel verpackt werden, damit sie diese Object-Funktionen nutzen können. Und dann gibt es noch das Umgekehrte, nämlich das Unboxing. Wenn jetzt ein Integer-Wert z.B. als Objekt daherkommt und wieder in ein Integer zurückkonvertiert wird, dann geschieht genau das anders herum, dass nämlich z.B. diese 32 Bit Speicher dieses Integers, die werden aus dieser Box wieder herausgezogen und können dann in arithmetischen Operationen verwendet werden.

Visual C# 2012 Grundkurs

Schreiben Sie eigene Programme in C# und lernen Sie dazu alle Schlüsselwörter und die meisten Konstrukte kennen, um sicher mit dieser Programmierspreche umzugehen.

7 Std. 1 min (44 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!