Från enkla frågor om för­de­lar­na med C# till för­kla­ring­ar av olika delar av pro­gram­me­rings­språ­ket och hur de kan användas – vi har sam­man­ställt en lista med de 10 vik­ti­gas­te frågorna för en job­bin­ter­vju inom C#.

Denna artikel belyser tio vanliga frågor som ställs vid en an­ställ­nings­in­ter­vju för en ut­veck­lings­po­si­tion. Vi har också in­klu­de­rat svar på var och en av dessa frågor. Även om dessa frågor täcker en rad ämnen, från enkla till de­tal­je­ra­de, finns det många andra po­ten­ti­el­la frågor om C# och dess spe­ci­al­funk­tio­ner.

Denna artikel ger en inledande översikt över olika frågor som kan ställas, från enkla frågor till mer specifika frågor som kräver vissa detaljer. Artikeln kan också hjälpa dig att förstå hur du för­be­re­der dig inför en intervju som syftar till att testa dina kunskaper i ett specifikt pro­gram­me­rings­språk.

Fråga 1: Vilka är de speciella egen­ska­per­na hos C# och vilka fördelar erbjuder pro­gram­me­rings­språ­ket?

Med sin speciella ut­veck­lings­mil­jö Visual Studio är C# i grunden utformat för snabbhet. Som ett ob­jek­t­o­ri­en­te­rat pro­gram­me­rings­språk utmärker sig C# också genom sin enkla och moderna app­ut­veck­ling, som är både mångsidig och kraftfull. Det är därför många ut­veck­la­re väljer C# när de ska bestämma vilket pro­gram­me­rings­språk de ska lära sig.

C# är i grunden uppbyggt kring klasser och objekt, med stark tillämp­ning av typ­nings­prin­ci­per. Det erbjuder funk­tio­ner som ab­strak­tion, inkaps­ling och arv. Pro­gram­me­rings­språ­ket är främst avsett för ut­veck­ling inom Micro­softs .NET-ekosystem.

På grund av sin an­pass­ning till .NET-ramverket har C# en egen struktur där många typer inom .NET-struk­tu­rer ärver från ob­jekt­klas­sen. Som ett resultat ärver dessa klasser metoder, egen­ska­per, fält och händelser. Denna hi­e­rar­kis­ka struktur un­der­lät­tar kon­si­stens och in­te­ro­pe­ra­bi­li­tet inom .NET-eko­sy­ste­met.

Fråga 2: Vad betyder klas­si­fi­ce­ring­en ”objekt” i C#?

För att förstå objekt i C# måste man förstå språkets grund­läg­gan­de principer. I grunden är C# ett ob­jek­t­o­ri­en­te­rat pro­gram­me­rings­språk, där klasser fungerar som grund. En klass avgränsar da­ta­struk­tu­ren och bestämmer hur den lagras, hanteras och överförs i C#. I huvudsak fungerar den som en mall för alla andra da­ta­struk­tu­rer.

Objekt är verkliga element inom C# som också upptar verkliga värden inom det till­gäng­li­ga minnet. Alla enheter som är utrustade med mycket specifika egen­ska­per eller som utför en specifik uppgift inom pro­gram­va­ran kan betraktas som objekt. Ob­jekt­ty­pen de­fi­nie­ras av en klass, och klass­in­stan­ser bildar ramverket för deras vidare struktur.

Låt oss till exempel säga att vi utformar ett program som kretsar kring en tv-apparat. Först måste vi definiera en entitet som ut­gångs­punkt. I det här fallet kan vi skapa klassen ”Te­le­vi­sion”. Inom denna klass vill vi definiera fem egen­ska­per: till­ver­ka­re, modell, färg, storlek och pris. Dessa egen­ska­per är medlemmar i klassen. Andra medlemmar i klassen kan vara händelser, metoder eller fält, som till­sam­mans utgör ett objekt.

För att pro­gram­me­ra en Sony Bravia som en instans av en TV kan vi ange Sony, Bravia, Black, 50 och 500 som egen­ska­per när vi skapar detta objekt. Detta de­fi­ni­e­rar in­for­ma­tio­nen om till­ver­ka­re, modell, färg, storlek och pris. Sony-te­le­vi­sio­nen är därför en instans av klassen Te­le­vi­sion. För att göra denna klass till­gäng­lig är det viktigt att definiera den som offentlig och inte som privat eller skyddad.

Fråga 3: Vad är skill­na­den mellan hanterad och icke-hanterad kod i C#?

Hanterad kod

Hanterad kod i C# är all kod som skapats med hjälp av .NET Framework. Denna typ av kod exekveras direkt av Common Language Runtime (CLR). CLR hanterar kodens livscykel, inklusive skapande av objekt, min­nes­al­lo­ke­ring och bort­tag­ning av objekt.

Ohanterad kod

Kod som ut­veck­lats utanför .NET Framework kallas icke-hanterad kod. Denna kategori omfattar alla ap­pli­ka­tio­ner som inte körs under CLR:s kontroll.

.NET Framework har en funktion som kan kon­ver­te­ra icke-hanterad kod till hanterad kod och vice versa. Denna funktion är särskilt användbar eftersom den un­der­lät­tar en smidig in­teg­ra­tion av ob­jekt­ska­pan­de och -körning samt ko­dav­falls­han­te­ring inom ramverket.

Fråga 4: Vad är skill­na­den mellan struct och class?

I C# avser termerna klass (class) och struktur (struct) an­vän­dar­de­fi­ni­e­ra­de datatyper. Dessa datatyper har dock några grund­läg­gan­de skill­na­der.

Struktur

  • Som en värdetyp i C# ärver struk­tu­rer alltid implicit från System.ValueType.
  • Struk­tu­rer kan inte härledas från andra typer.
  • Som regel används en struktur för mindre da­ta­mäng­der.
  • Struk­tu­rer kan inte vara abstrakta och kräver därför direkt im­ple­men­te­ring.
  • Det är inte möjligt att tilldela en stan­dard­kon­struk­tör till en struktur.
  • Det är inte ob­li­ga­to­riskt att skapa ett objekt med nyc­kelor­det new.

Klass

  • Som re­fe­ren­styp i C# ärver klasser alltid implicit från System.Object.
  • Klasser kan härledas från andra klasser, vilket möjliggör arv.
  • Som regel används en klass för större da­ta­mäng­der eller mer komplexa struk­tu­rer.
  • Klasser kan vara abstrakta, vilket innebär att de inte tillåter direkt in­stan­sie­ring.
  • Till skillnad från struk­tu­rer kan klasser ha en stan­dard­kon­struk­tor om de behöver en.

Fråga 5: Vad är skill­na­den mellan ett gräns­snitt och en abstrakt klass i C#?

Gräns­snitt (in­ter­fa­ces) och abstrakta klasser (abstract classes) spe­ci­fi­ce­rar båda kod­kon­trakts­klas­ser, t.ex. för­hands­vill­kor eller ob­jek­tin­va­ri­ab­ler, för härledda klasser. Trots denna ge­men­sam­ma nämnare finns det många skill­na­der, vilket funk­tio­na­li­te­ten hos gräns­snitt och abstrakta klasser visar.

Kod­kon­trakts­klas­ser kan användas för att ange för­hands­vill­kor, ef­ter­vill­kor och ob­jek­tin­va­ri­ab­ler. För­hands­vill­kor är krav som måste uppfyllas när man går in i en metod eller egenskap.

När det gäller arv kan abstrakta klasser innehålla metoder med im­ple­men­te­rad kod utöver abstrakta metoder, medan gräns­snitt kräver att alla metoder är abstrakta. På grund av detta behöver abstrakta klasser nyc­kelor­det abstract för de­kla­ra­tion.

Eftersom C# inte stöder multipel arv av klasser kan en klass inte ärva från mer än en abstrakt klass. Däremot kan flera gräns­snitt im­ple­men­te­ras av en klass för att möj­lig­gö­ra multipel arv av gräns­snitt.

En abstrakt klass kan ha kon­struk­to­rer som kan anropas av härledda klasser. Gräns­snitt kan inte innehålla kon­struk­to­rer eftersom de inte är instanser och därför inte kan ini­ti­a­li­se­ras.

Fråga 6: Vad är egen­ska­per i C#?

I C# är egen­ska­per ett element i en klass som låter dig läsa, skriva eller beräkna värdet på ett privat de­kla­re­rat fält. Egen­ska­per kan användas för att komma åt of­fent­li­ga gräns­snitt eller tillåta ändringar av data som lagras i en klass.

Egen­ska­per är en grund­läg­gan­de aspekt av ob­jek­t­o­ri­en­te­rad pro­gram­me­ring i C# och används ofta i ap­pli­ka­tio­ner för att ge ren och säker åtkomst till klassdata.

De de­kla­re­ras med hjälp av get och set ac­ces­so­rer, som de­fi­ni­e­rar beteendet för att läsa eller ställa in egen­skaps­vär­det. get accessorn hämtar egen­ska­pens värde, medan set accessorn ställer in egen­ska­pens värde. En egenskap kan ha en eller båda ac­ces­so­rer­na. Detta beror på om egen­ska­pen är (eller bör vara) skriv­skyd­dad eller läs-/skrivbar.

Fråga 7: Vad menas med boxing och unboxing i C#?

Boxning och unboxning används i C# för typ­kon­ver­te­ring­ar.

  • Kon­ver­te­ring från en värdetyp till en re­fe­ren­styp kallas boxing. Detta kan till exempel vara att kon­ver­te­ra en enkel datatyp som int till datatypen object. Boxing är en implicit kon­ver­te­ring.
  • Om­vand­ling från en re­fe­ren­styp till en värdetyp kallas däremot unboxing. Unboxing kan endast ske med exakt samma värdetyp som ur­sprung­li­gen boxades, till exempel om­vand­ling av objekt tillbaka till int.

Fråga 8: Vad är upp­räk­ning (enum) och vad används det till i C#?

En enum är en värdetyp med en upp­sätt­ning re­la­te­ra­de namngivna kon­stan­ter. Denna grupp kallas också för en ”enu­me­ra­tor­lis­ta”. I C# är enums upp­räk­na­de datatyper som är primitiva och an­vän­dar­de­fi­ni­e­ra­de. Nyc­kelor­det enum används för att deklarera en upp­räk­ning.

Enu­me­ra­tio­ner i .NET Framework används för att skapa numeriska kon­stan­ter. Varje medlem i en enu­me­ra­tion är av typen enu­me­ra­tion, och ett numeriskt värde krävs för varje enu­me­ra­tion­styp. Dessa enu­me­ra­tions­vär­den är oför­än­der­li­ga. Enu­me­ra­tio­ner kan re­pre­sen­te­ras som tec­ken­sträng­ar och hanteras som heltal.

Stan­dard­ty­pen för upp­räk­ning­s­e­le­men­tet är int. Som standard har den första upp­räk­na­ren värdet 0 och värdet för varje ef­ter­föl­jan­de upp­räk­na­re ökas med 1. Dessa värden kan dock också ställas in manuellt, till exempel 10 = På och 20 = Av.

Fråga 9: Vad är skill­na­den mellan Dispose och Finalize i C#?

I C# används båda metoderna för att frigöra resurser.

Metoden Dispose frigör icke-hanterade resurser, såsom da­ta­ba­san­slut­ning­ar som inte hanteras au­to­ma­tiskt av .NET-kör­nings­mil­jön. Den im­ple­men­te­ras normalt i en klass. Detta im­ple­men­te­rar i sin tur gräns­snit­tet IDis­po­sab­le, som de­fi­ni­e­rar metoden Dispose.

Denna metod anropas explicit av kli­ent­ko­den för att frigöra resurser som inte längre behövs. Al­ter­na­tivt kan den anropas implicit med using, vilket sä­ker­stäl­ler att Dispose-metoden anropas när objektet går utanför räck­vid­den.

Finalize-metoden används däremot för att utföra rens­nings­åt­gär­der på ett objekt precis innan sopupp­sam­lings­pro­ces­sen sker. Som ett resultat im­ple­men­te­ras den van­ligt­vis i en klass som åsi­do­sät­ter Object.Finalize-metoden.

Fråga 10: Vilka är för­de­lar­na med för­läng­nings­me­to­der i C#?

Extension-metoder gör det möjligt för ut­veck­la­re att utöka funk­tio­na­li­te­ten hos en befintlig typ utan att ändra den ur­sprung­li­ga typen eller skapa en ny härledd typ. De gör det möjligt att lägga till metoder till be­fint­li­ga klasser, struk­tu­rer, gräns­snitt, enums etc., även om metoderna inte ur­sprung­li­gen de­fi­ni­e­ra­des inom typen.

Ex­ten­sions­me­to­der de­kla­re­ras inom en statisk klass och de­fi­nie­ras som statiska metoder, med en unik första parameter som heter this. Denna parameter anger den typ som utökas, vilket gör att ex­ten­sions­me­to­den kan anropas som om den vore en in­stans­me­tod av den typen.

Vilka typer av frågor kan jag förvänta mig i en C#-intervju?

Att veta vem som in­ter­vju­ar dig kan ge dig en bättre inblick i vilken typ av frågor du kommer att få. Re­kry­te­ra­re saknar ibland den expertis som krävs för djup­gå­en­de dis­kus­sio­ner om spe­ci­a­li­se­ra­de områden som ka­te­go­ri­er eller objekt i C#. Om in­ter­vju­a­ren är en teknisk chef eller en medlem av ut­veck­lings­tea­met är det därför mer troligt att in­ter­vjufrå­gor­na kommer att handla om specifika pro­gram­me­rings­kon­cept och fär­dig­he­ter.

Om den ledande mjuk­va­ru­ar­ki­tek­ten eller web­b­ut­veck­la­ren är när­va­ran­de är det troligt att de kommer att ställa spe­ci­a­li­se­ra­de frågor, särskilt om du söker roller som går utöver ny­bör­jar­ni­vå. Detta beror på att dina framtida kollegor vill veta hur den nya team­me­d­lem­men kommer att kunna hjälpa dem i deras dagliga arbete.

Gå till huvudmeny