Från enkla frågor om fördelarna med C# till förklaringar av olika delar av programmeringsspråket och hur de kan användas – vi har sammanställt en lista med de 10 viktigaste frågorna för en jobbintervju inom C#.

Denna artikel belyser tio vanliga frågor som ställs vid en anställningsintervju för en utvecklingsposition. Vi har också inkluderat svar på var och en av dessa frågor. Även om dessa frågor täcker en rad ämnen, från enkla till detaljerade, finns det många andra potentiella frågor om C# och dess specialfunktioner.

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örbereder dig inför en intervju som syftar till att testa dina kunskaper i ett specifikt programmeringsspråk.

Fråga 1: Vilka är de speciella egenskaperna hos C# och vilka fördelar erbjuder programmeringsspråket?

Med sin speciella utvecklingsmiljö Visual Studio är C# i grunden utformat för snabbhet. Som ett objektorienterat programmeringsspråk utmärker sig C# också genom sin enkla och moderna apputveckling, som är både mångsidig och kraftfull. Det är därför många utvecklare väljer C# när de ska bestämma vilket programmeringsspråk de ska lära sig.

C# är i grunden uppbyggt kring klasser och objekt, med stark tillämpning av typningsprinciper. Det erbjuder funktioner som abstraktion, inkapsling och arv. Programmeringsspråket är främst avsett för utveckling inom Microsofts .NET-ekosystem.

På grund av sin anpassning till .NET-ramverket har C# en egen struktur där många typer inom .NET-strukturer ärver från objektklassen. Som ett resultat ärver dessa klasser metoder, egenskaper, fält och händelser. Denna hierarkiska struktur underlättar konsistens och interoperabilitet inom .NET-ekosystemet.

Fråga 2: Vad betyder klassificeringen ”objekt” i C#?

För att förstå objekt i C# måste man förstå språkets grundläggande principer. I grunden är C# ett objektorienterat programmeringsspråk, där klasser fungerar som grund. En klass avgränsar datastrukturen och bestämmer hur den lagras, hanteras och överförs i C#. I huvudsak fungerar den som en mall för alla andra datastrukturer.

Objekt är verkliga element inom C# som också upptar verkliga värden inom det tillgängliga minnet. Alla enheter som är utrustade med mycket specifika egenskaper eller som utför en specifik uppgift inom programvaran kan betraktas som objekt. Objekttypen definieras av en klass, och klassinstanser 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 utgångspunkt. I det här fallet kan vi skapa klassen ”Television”. Inom denna klass vill vi definiera fem egenskaper: tillverkare, modell, färg, storlek och pris. Dessa egenskaper är medlemmar i klassen. Andra medlemmar i klassen kan vara händelser, metoder eller fält, som tillsammans utgör ett objekt.

För att programmera en Sony Bravia som en instans av en TV kan vi ange Sony, Bravia, Black, 50 och 500 som egenskaper när vi skapar detta objekt. Detta definierar informationen om tillverkare, modell, färg, storlek och pris. Sony-televisionen är därför en instans av klassen Television. För att göra denna klass tillgänglig är det viktigt att definiera den som offentlig och inte som privat eller skyddad.

Fråga 3: Vad är skillnaden 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, minnesallokering och borttagning av objekt.

Ohanterad kod

Kod som utvecklats utanför .NET Framework kallas icke-hanterad kod. Denna kategori omfattar alla applikationer som inte körs under CLR:s kontroll.

.NET Framework har en funktion som kan konvertera icke-hanterad kod till hanterad kod och vice versa. Denna funktion är särskilt användbar eftersom den underlättar en smidig integration av objektskapande och -körning samt kodavfallshantering inom ramverket.

Fråga 4: Vad är skillnaden mellan struct och class?

I C# avser termerna klass (class) och struktur (struct) användardefinierade datatyper. Dessa datatyper har dock några grundläggande skillnader.

Struktur

  • Som en värdetyp i C# ärver strukturer alltid implicit från System.ValueType.
  • Strukturer kan inte härledas från andra typer.
  • Som regel används en struktur för mindre datamängder.
  • Strukturer kan inte vara abstrakta och kräver därför direkt implementering.
  • Det är inte möjligt att tilldela en standardkonstruktör till en struktur.
  • Det är inte obligatoriskt att skapa ett objekt med nyckelordet new.

Klass

  • Som referenstyp 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 datamängder eller mer komplexa strukturer.
  • Klasser kan vara abstrakta, vilket innebär att de inte tillåter direkt instansiering.
  • Till skillnad från strukturer kan klasser ha en standardkonstruktor om de behöver en.

Fråga 5: Vad är skillnaden mellan ett gränssnitt och en abstrakt klass i C#?

Gränssnitt (interfaces) och abstrakta klasser (abstract classes) specificerar båda kodkontraktsklasser, t.ex. förhandsvillkor eller objektinvariabler, för härledda klasser. Trots denna gemensamma nämnare finns det många skillnader, vilket funktionaliteten hos gränssnitt och abstrakta klasser visar.

Kodkontraktsklasser kan användas för att ange förhandsvillkor, eftervillkor och objektinvariabler. Förhandsvillkor ä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 implementerad kod utöver abstrakta metoder, medan gränssnitt kräver att alla metoder är abstrakta. På grund av detta behöver abstrakta klasser nyckelordet abstract för deklaration.

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änssnitt implementeras av en klass för att möjliggöra multipel arv av gränssnitt.

En abstrakt klass kan ha konstruktorer som kan anropas av härledda klasser. Gränssnitt kan inte innehålla konstruktorer eftersom de inte är instanser och därför inte kan initialiseras.

Fråga 6: Vad är egenskaper i C#?

I C# är egenskaper ett element i en klass som låter dig läsa, skriva eller beräkna värdet på ett privat deklarerat fält. Egenskaper kan användas för att komma åt offentliga gränssnitt eller tillåta ändringar av data som lagras i en klass.

Egenskaper är en grundläggande aspekt av objektorienterad programmering i C# och används ofta i applikationer för att ge ren och säker åtkomst till klassdata.

De deklareras med hjälp av get och set accessorer, som definierar beteendet för att läsa eller ställa in egenskapsvärdet. get accessorn hämtar egenskapens värde, medan set accessorn ställer in egenskapens värde. En egenskap kan ha en eller båda accessorerna. Detta beror på om egenskapen är (eller bör vara) skrivskyddad eller läs-/skrivbar.

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

Boxning och unboxning används i C# för typkonverteringar.

  • Konvertering från en värdetyp till en referenstyp kallas boxing. Detta kan till exempel vara att konvertera en enkel datatyp som int till datatypen object. Boxing är en implicit konvertering.
  • Omvandling från en referenstyp till en värdetyp kallas däremot unboxing. Unboxing kan endast ske med exakt samma värdetyp som ursprungligen boxades, till exempel omvandling av objekt tillbaka till int.

Fråga 8: Vad är uppräkning (enum) och vad används det till i C#?

En enum är en värdetyp med en uppsättning relaterade namngivna konstanter. Denna grupp kallas också för en ”enumeratorlista”. I C# är enums uppräknade datatyper som är primitiva och användardefinierade. Nyckelordet enum används för att deklarera en uppräkning.

Enumerationer i .NET Framework används för att skapa numeriska konstanter. Varje medlem i en enumeration är av typen enumeration, och ett numeriskt värde krävs för varje enumerationstyp. Dessa enumerationsvärden är oföränderliga. Enumerationer kan representeras som teckensträngar och hanteras som heltal.

Standardtypen för uppräkningselementet är int. Som standard har den första uppräknaren värdet 0 och värdet för varje efterföljande uppräknare ö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 skillnaden 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 databasanslutningar som inte hanteras automatiskt av .NET-körningsmiljön. Den implementeras normalt i en klass. Detta implementerar i sin tur gränssnittet IDisposable, som definierar metoden Dispose.

Denna metod anropas explicit av klientkoden för att frigöra resurser som inte längre behövs. Alternativt kan den anropas implicit med using, vilket säkerställer att Dispose-metoden anropas när objektet går utanför räckvidden.

Finalize-metoden används däremot för att utföra rensningsåtgärder på ett objekt precis innan sopuppsamlingsprocessen sker. Som ett resultat implementeras den vanligtvis i en klass som åsidosätter Object.Finalize-metoden.

Fråga 10: Vilka är fördelarna med förlängningsmetoder i C#?

Extension-metoder gör det möjligt för utvecklare att utöka funktionaliteten hos en befintlig typ utan att ändra den ursprungliga typen eller skapa en ny härledd typ. De gör det möjligt att lägga till metoder till befintliga klasser, strukturer, gränssnitt, enums etc., även om metoderna inte ursprungligen definierades inom typen.

Extensionsmetoder deklareras inom en statisk klass och definieras som statiska metoder, med en unik första parameter som heter this. Denna parameter anger den typ som utökas, vilket gör att extensionsmetoden kan anropas som om den vore en instansmetod av den typen.

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

Att veta vem som intervjuar dig kan ge dig en bättre inblick i vilken typ av frågor du kommer att få. Rekryterare saknar ibland den expertis som krävs för djupgående diskussioner om specialiserade områden som kategorier eller objekt i C#. Om intervjuaren är en teknisk chef eller en medlem av utvecklingsteamet är det därför mer troligt att intervjufrågorna kommer att handla om specifika programmeringskoncept och färdigheter.

Om den ledande mjukvaruarkitekten eller webbutvecklaren är närvarande är det troligt att de kommer att ställa specialiserade frågor, särskilt om du söker roller som går utöver nybörjarnivå. Detta beror på att dina framtida kollegor vill veta hur den nya teammedlemmen kommer att kunna hjälpa dem i deras dagliga arbete.

Gå till huvudmeny