Von einfachen Fragen rund um die Vorteile von C# bis zur Erklärung der un­ter­schied­li­chen Elemente und ihrer Anwendung fassen wir die wich­tigs­ten Fragen für ein Vor­stel­lungs­ge­spräch rund um die ob­jekt­ba­sier­te Pro­gram­mier­spra­che C# zusammen.

Dieser Artikel stellt zehn Fragen, die häufig in einem Be­wer­bungs­ge­spräch für eine Stelle in der Ent­wick­lung gestellt werden, und dazu passende Antworten vor. Es gibt natürlich noch eine große Band­brei­te an weiteren po­ten­zi­el­len Fragen zu C# und seinen Be­son­der­hei­ten. Wir wollen einen ersten Überblick von eher einfach ge­hal­te­nen Fragen zu recht spe­zi­fi­schen De­tail­fra­gen geben und gleich­zei­tig dafür sen­si­bi­li­sie­ren, sich gut auf ein Gespräch mit Schwer­punkt zu einer be­stimm­ten Pro­gram­mier­spra­che vor­zu­be­rei­ten.

Frage 1: Was sind die Be­son­der­hei­ten von C# und welche Vorteile bietet die Pro­gram­mier­spra­che?

C# ist mit der spe­zi­el­len Ent­wick­lungs­um­ge­bung Visual Studio im We­sent­li­chen auf Schnel­lig­keit ausgelegt. Als ob­jekt­ori­en­tier­te Pro­gram­mier­spra­che punktet C# auch heut­zu­ta­ge mit seiner einfachen und modernen An­wen­dungs­ent­wick­lung, die gleich­zei­tig sehr viel­sei­tig und leis­tung­fä­hig ist. Viele Ent­wick­le­rin­nen und Ent­wick­ler ent­schei­den sich deshalb für C#, wenn Sie sich die Frage stellt, welche Pro­gram­mier­spra­che sie lernen sollen.

In der Grund­struk­tur setzt C# auf ein Konzept, das auf Klassen und Objekten basiert. C# ist eine stark ty­pi­sier­te Sprache, die Funk­tio­nen wie Abs­trak­ti­on, Kapselung und bei­spiels­wei­se Ver­ber­bung bietet. Die Pro­gram­mier­spra­che ist im We­sent­li­chen darauf aus­ge­rich­tet, für die Ent­wick­lung innerhalb des Microsoft-.NET-Öko­sys­tems zu fungieren.

Bedingt durch diese spezielle Aus­rich­tung hat C# einen eigenen Aufbau, bei dem bei­spiels­wei­se die meisten Typen innerhalb der .NET-Struk­tu­ren von der Objekt-Klasse erben. Diese Klassen ziehen dann Methoden, Ei­gen­schaf­ten, Felder und Er­eig­nis­se nach sich.

Frage 2: Was versteht man in C# unter der Klas­si­fi­ka­ti­on „Objekt“?

Um die Klas­si­fi­ka­ti­on des Objekts zu verstehen, muss man die Logik von C# in den Grund­la­gen verstehen. Als ob­jekt­ori­en­tier­te Pro­gram­mier­spra­che wird das Fundament in C# durch Klassen aufgebaut. Eine Klasse definiert die Struktur der Daten und legt gleich­zei­tig fest, wie diese Daten ge­spei­chert werden oder wie eine Ver­wal­tung und/oder Über­tra­gung von Daten in C# erfolgen darf. Sie ist demnach die Vorlage für alle weiteren Struk­tu­ren.

Objekte sind reale Elemente innerhalb von C#, die damit verbunden auch reale Werte innerhalb des zur Verfügung stehenden Speichers belegen. Als Objekt lassen sich alle Entitäten zu­sam­men­fas­sen, die entweder mit ganz be­stimm­ten Merkmalen aus­ge­stat­tet sind oder die innerhalb der Software eine bestimmte Arbeit ausführen. Der Typ eines Objekts wird durch eine Klasse definiert, so­ge­nann­te Klas­sen­in­stan­zen bilden dabei das Gerüst für den weiteren Aufbau.

Um das Konzept von Objekten in C# zu ver­an­schau­li­chen, ein Beispiel: In einem neu­ge­stal­te­ten Programm soll es um einen Fernseher gehen. Als erstes muss dazu eine passende Entität als Start­punkt definiert werden, in diesem Fall handelt es sich dabei um die Entität für den Fernseher, der als Klasse bei­spiels­wei­se „te­le­vi­si­on“ haben kann. Weiter de­fi­nie­ren wir für den Fernseher fünf Ei­gen­schaf­ten: Her­stel­ler, Modell, Farbe, Größe und den Preis. Wie weiter oben be­schrie­ben sind diese Ei­gen­schaf­ten so­ge­nann­te Mit­glie­der einer Klasse. Andere Mit­glie­der wären zum Beispiel Er­eig­nis­se, Methoden oder auch Felder, die daraus ein Objekt bilden.

Um einen Sony Bravia als Instanz eines Fern­se­hers zu pro­gram­mie­ren und dieses Objekt zu er­schaf­fen, können wir als Ei­gen­schaf­ten Sony, Bravia, Schwarz, 50 und 500 angeben. Damit sind die In­for­ma­tio­nen zu Her­stel­ler, Modell, Farbe, Größe und Preis fest­ge­legt. Der Sony-Fernseher ist somit eine Instanz der Klasse „te­le­vi­si­on“. Soll auf diese Klasse zu­ge­grif­fen werden können, ist es übrigens wichtig, diese als „öf­fent­lich“ zu de­fi­nie­ren und sie nicht privat oder geschützt zu lassen.

Frage 3: Was un­ter­schei­det ver­wal­te­ten von nicht ver­wal­te­tem Code bei C#?

Ver­wal­te­ter Code

Ver­wal­te­ter Code ist in C# all jener Code, der mit dem .NET Framework erstellt wurde. Dieser Art Code wird direkt vom Common Language Runtime (CLR) aus­ge­führt. Die Laufzeit verwaltet den Le­bens­zy­klus des je­wei­li­gen Codes, ein­schließ­lich Ob­jekter­stel­lung, Spei­cher­zu­wei­sung und Ob­jekt­ent­sor­gung.

Nicht ver­wal­te­ter Code

Der Code, der außerhalb des .NET Frame­works ent­wi­ckelt wird, wird als nicht ver­wal­te­ter Code be­zeich­net. Darunter fallen alle An­wen­dun­gen, die nicht unter der Kontrolle des CLR aus­ge­führt werden.

Das .NET Framework bietet eine Funktion, mit der nicht ver­wal­te­ter Code in ver­wal­te­ten Code um­ge­wan­delt werden kann – und umgekehrt. Das ist ins­be­son­de­re deshalb praktisch, da durch die Funktion innerhalb des Frame­works Ob­jekter­stel­lung, Aus­füh­rung und Ent­sor­gung des Codes vor­ge­nom­men werden können.

Web­hos­ting
Das beste Web­hos­ting zum Spit­zen­preis
  • 3x schneller und 60 % günstiger
  • Maximale Ver­füg­bar­keit mit > 99.99 %
  • Nur bei IONOS: Bis zu 500 GB Spei­cher­platz inklusive

Frage 4: Worin besteht der Un­ter­schied zwischen struct und class?

In C# be­zeich­nen die Begriffe Klasse (class) und Struktur (struct) be­nut­zer­de­fi­nier­te Da­ten­ty­pen mit einigen grund­le­gen­den Un­ter­schie­den:

Struktur

  • Als Werttyp in C# erbt die Struktur immer implizit von System.ValueType.
  • Struk­tu­ren können nicht von anderen Typen ab­ge­lei­tet werden.
  • In der Regel wird eine Struktur für kleinere Da­ten­men­gen verwendet.
  • Struk­tu­ren können nicht abstrakt sein und erfordern daher eine direkte Im­ple­men­tie­rung.
  • Es ist nicht möglich, einer Struktur einen Stan­dard­kon­struk­tor zu­zu­wei­sen.
  • Das Erstellen eines Objekts unter Ver­wen­dung des new-Schlüs­sel­worts ist nicht zwingend er­for­der­lich.

Klasse

  • Als Ver­weis­typ in C# erbt die Klasse immer implizit von System.Object.
  • Klassen können von anderen Klassen ab­ge­lei­tet werden, was Vererbung er­mög­licht.
  • In der Regel wird eine Klasse für größere Da­ten­men­gen oder kom­ple­xe­re Struk­tu­ren verwendet.
  • Klassen können abstrakt sein, was bedeutet, dass sie keine direkte In­stan­zi­ie­rung zulassen.
  • Im Gegensatz zu Struk­tu­ren können Klassen einen Stan­dard­kon­struk­tor haben, der bei Bedarf im­ple­men­tiert werden kann.
Tipp

Bei den un­ter­schied­li­chen Pro­gram­mier­spra­chen gibt es immer wieder Ge­mein­sam­kei­ten, bei­spiels­wei­se darin, wann Code als schlech­ter Code be­trach­tet werden kann. Wei­ter­füh­ren­de In­for­ma­tio­nen bieten unter anderem diese Ratgeber in unserem Digital Guide:

Frage 5: Was ist in C# der Un­ter­schied zwischen einer Schnitt­stel­le und einer abs­trak­ten Klasse?

Schnitt­stel­len (in­ter­faces) und abstrakte Klassen (abstract classes) haben gemein, dass sie Code­ver­trags­klas­sen – z. B. Vor­be­din­gun­gen oder Ob­jekt­in­va­ri­an­ten – für ab­ge­lei­te­te Klassen im Code angeben. Trotz dieser Ge­mein­sam­keit gibt es eine Reihe von Un­ter­schie­den, wie die Funk­ti­ons­wei­se von Schnitt­stel­len und abs­trak­ten Klassen zeigt.

Mit Code­ver­trags­klas­sen können Sie Vor­be­din­gun­gen, Post­be­din­gun­gen und Ob­jekt­in­va­ri­an­ten in Ihrem Code angeben. Vor­be­din­gun­gen sind An­for­de­run­gen, die beim Eingeben einer Methode oder einer Ei­gen­schaft erfüllt werden müssen.

In Sachen Vererbung liegen die Un­ter­schie­de darin, dass abstrakte Klassen Methoden mit Code wie auch abstrakte Methoden enthalten können und für die Schnitt­stel­len alle Methoden abstrakt sein müssen. Daher benötigen abstrakte Klassen zur De­kla­rie­rung das Schlüs­sel­wort abstract.

Eine Klasse kann von höchstens einer abs­trak­ten Klasse erben, da C# keine mehrfache Vererbung von Klassen un­ter­stützt wird. Dafür können von einer Klasse mehrere Schnitt­stel­len im­ple­men­tiert werden, um eine mehrfache Vererbung von Schnitt­stel­len zu er­mög­li­chen.

Eine abstrakte Klasse kann Kon­struk­to­ren haben, die von ab­ge­lei­te­ten Klassen auf­ge­ru­fen werden können. Schnitt­stel­len können keine Kon­struk­to­ren enthalten, da sie keine Instanzen sind und daher nicht in­itia­li­siert werden können.

Frage 6: Was sind Ei­gen­schaf­ten (pro­per­ties) in C#?

Unter Ei­gen­schaf­ten versteht man in C# ein Element einer Klasse, mit dem der Wert eines privat de­kla­rier­ten Feldes gelesen, be­schrie­ben oder berechnet werden kann. Mit Ei­gen­schaf­ten kann auf öf­fent­li­che Schnitt­stel­le zu­ge­grif­fen werden bzw. lassen die Ei­gen­schaf­ten Än­de­run­gen der in einer Klasse ge­spei­cher­ten Daten zu.

Ei­gen­schaf­ten in C# sind ein ele­men­ta­rer Be­stand­teil der ob­jekt­ori­en­tier­ten Pro­gram­mie­rung und werden in An­wen­dun­gen häufig verwendet, um einen sauberen und sicheren Zugriff auf Klas­sen­da­ten zu er­mög­li­chen.

Sie werden unter Ver­wen­dung der get- und set-Ac­ces­so­ren de­kla­riert, die das Verhalten zum Lesen oder Setzen des Ei­gen­schafts­werts de­fi­nie­ren. Der get-Accessor ruft den Wert der Ei­gen­schaft ab, während der set-Accessor den Wert der Ei­gen­schaft festlegt. Eine Ei­gen­schaft kann einen oder beide Ac­ces­so­ren haben. Dies hängt davon ab, ob die Ei­gen­schaft schreib­ge­schützt oder beschreib- und lesbar ist bzw. sein soll.

Frage 7: Was ist mit Boxing und Unboxing in C# gemeint?

Boxing und Unboxing werden in C# für Typ­um­wand­lun­gen genutzt.

  • Das Umwandeln von einem Werttyp in einen Re­fe­renz­typ be­zeich­net man als Boxing, zum Beispiel von einem einfachen Datentyp wie int zu object. Boxing ist eine implizite Kon­ver­tie­rung.
  • Das Umwandeln von einem Re­fe­renz­typ in einen Werttyp be­zeich­net man dgegen als Unboxing. Das Unboxing kann nur zu dem exakten Werttyp erfolgen, der ur­sprüng­lich geboxt wurde – bei­spiels­wei­se wenn object wieder zu int um­ge­wan­delt wird.

Frage 8: Was versteht man unter dem Auf­zäh­lungs­typ (enum) und wozu wird er in C# verwendet?

Ein Enum ist ein Werttyp mit einer Gruppe von ver­wand­ten benannten Kon­stan­ten. Diese Gruppe wird auch als „Enu­me­ra­tor­lis­te“ be­zeich­net. Enums sind auf­ge­lis­te­te Da­ten­ty­pen in C#, die als primitive Da­ten­ty­pen be­nut­zer­de­fi­niert sind. Das Schlüs­sel­wort enum wird verwendet, um eine Auf­zäh­lung zu de­kla­rie­ren.

Enums werden immer dann genutzt, wenn im .NET Framework nu­me­ri­sche Kon­stan­ten erstellt werden sollen. Alle Mit­glie­der des Enums sind vom Enum-Typ. Daher muss für jeden Enum-Typ ein nu­me­ri­scher Wert vorhanden sein. Diese Enum-Werte sind fest­ge­legt. Ein Enum kann als Zei­chen­fol­ge angezeigt und als Ganzzahl ver­ar­bei­tet werden.

Der zugrunde liegende Stan­dard­typ des Enu­me­ra­ti­ons­ele­ments ist int. Stan­dard­mä­ßig hat der erste Enu­me­ra­tor den Wert 0, und der Wert jedes auf­ein­an­der­fol­gen­den Enu­me­ra­tors wird um 1 erhöht. Diese Werte können aber auch manuell fest­ge­legt werden, bei­spiels­wei­se ist dann 10 = On und 20 = Off.

Frage 9: Welchen Un­ter­schied gibt es zwischen Dispose und Finalize in C#?

In C# werden beide Methoden verwendet, um Res­sour­cen frei­zu­ge­ben.

Die Dispose-Methode gibt nicht ver­wal­te­te Res­sour­cen frei, bei­spiels­wei­se Da­ten­bank­ver­bin­dun­gen, die nicht au­to­ma­tisch vom .NET-Laufzeit-Host verwaltet werden. Sie wird nor­ma­ler­wei­se in einer Klasse im­ple­men­tiert. Diese im­ple­men­tiert wiederum das IDis­posable-Interface, das die Dispose-Methode definiert.

Diese Methode wird explizit dann vom Cli­ent­code auf­ge­ru­fen, wenn nicht mehr benötigte Res­sour­cen frei­ge­ge­ben werden sollen. Sie kann implizit durch die Anweisung using auf­ge­ru­fen werden. Dadurch wird si­cher­stellt, dass die Dispose-Methode auf­ge­ru­fen wird, wenn das Objekt außerhalb des Gül­tig­keits­be­reichs geht.

Die Finalize-Methode wird hingegen verwendet, um Be­rei­ni­gungs­ope­ra­tio­nen an einem Objekt kurz vor dem Garbage-Coll­ec­tion-Vorgang durch­zu­füh­ren. Daher wird sie nor­ma­ler­wei­se in einer Klasse im­ple­men­tiert, die die Object.Finalize-Methode außer Kraft setzt.

Frage 10: Welche Vorteile bieten Er­wei­te­rungs­me­tho­den in C#?

Mit einer Er­wei­te­rungs­me­tho­de kann die Funk­tio­na­li­tät eines vor­han­de­nen Typs erweitert werden, ohne den ur­sprüng­li­chen Typ zu ändern oder einen neuen ab­ge­lei­te­ten Typ zu erstellen. Er­wei­te­rungs­me­tho­den er­mög­li­chen es Ent­wick­le­rin­nen und Ent­wick­lern, Methoden zu vor­han­de­nen Typen wie Klassen, Struk­tu­ren, Schnitt­stel­len, Enums etc. hin­zu­zu­fü­gen, die ur­sprüng­lich nicht in diesen Typen definiert wurden.

Er­wei­te­rungs­me­tho­den werden in einer sta­ti­schen Klasse de­kla­riert und als statische Methoden mit einem spe­zi­el­len ersten Parameter namens this definiert. Dieser gibt den Typ an, der erweitert wird. Gleich­zei­tigt er­mög­licht er, die Er­wei­te­rungs­me­tho­de auf­zu­ru­fen, als ob es sich um eine In­stanz­me­tho­de dieses Typs handelt.

Tipp: Die C#-Fragen im Vor­stel­lungs­ge­spräch können stark var­ri­ie­ren

Welche Person des po­ten­zi­el­len Ar­beit­ge­bers am Vor­stel­lungs­ge­spräch teilnimmt, kann einen Hinweis darauf geben, wie tief die Fragen zu Pro­gram­mier­kennt­nis­sen reichen werden. Oft ist es so, dass Re­crui­te­rin­nen und Recruiter nicht das nötige Fach­wis­sen haben, um eine de­tail­lier­te Dis­kus­si­on zu den Fach­kennt­nis­sen eines bestimmen Bereichs zu führen, bei­spiels­wei­se zu Ka­te­go­rien oder Objekten bei C#.

Anders sieht es aus, wenn bei­spiels­wei­se der Lead Software Architect oder die Web­ent­wick­le­rin mit am Tisch sitzen. Dann ist es gerade bei Jobs jenseits des Be­rufs­ein­stiegs mehr oder weniger gesetzt, dass Fragen rund um den Fach­be­reich gestellt werden. Schließ­lich wollen die zu­künf­ti­gen Kol­le­gin­nen und Kollegen wissen, inwiefern das neue Team­mit­glied im Ar­beits­all­tag un­ter­stüt­zen kann.

Zum Hauptmenü