Skip to content

C# - vad är det för språk?

C# är ett modernt objektorienterat språk, som är baserat på C++ och liknar Java. Det uttalas “see sharp”. Det är en del av Microsofts .NET-plattform. C# är ett plattformsoberoende språk.

Image description

C# är enkelt att lära sig, har ett stort kodbibliotek, och har flera användningsområden. Det har dock något långsammare programstart och lämpar sig inte för realtidsapplikationer. C# är välkänt för sin enkelhet, tydlighet och kraftfulla funktionalitet, inklusive stöd för objektorienterad programmering, händelsebaserad programmering, LINQ (Language Integrated Query) och asynkron programmering.

C# utvecklades av Microsoft som en del av .NET-plattformen. Det utvecklades i slutet av 90-talet och släpptes år 2000. Chefsarkitekten heter Anders Hejlsberg och kommer från Danmark. Han har även skapat programspråket Delphi och dessutom Turbo Pascal-kompilatorn. C# är baserat på C++ och har samtidigt stora likheter med Java.

2001 standardiserades C# av Ecma International och kallades ECMA-334.

C# är ett kompilerande språk, vilket innebär att koden du skriver (källkoden) först översätts till maskinkod innan den kan köras (exekveras) på din dator. C#-koden skriver du i en texteditor som till exempel VS Code. För att översätta C#-koden till maskinkod som kan köras på din dator, används en ett program som kallas kompilator. Under kompileringen verifieras dessutom din C#-kod, vilket innebär att kompilatorn kontrollerar att du har rätt syntax, det vill säga att det du skrivit följer språkets regler.

Datorns processor, även kallad CPU (Central Processing Unit) och brukar benämnas datorn hjärna, kan bara köra maskinkod. Maskinkod består av binära instruktioner, 1:or och 0:or, som är specifika för den processor som finns i din dator.

För att kunna köra den kod du skriver i C# behöver den alltså kompileras. Vid kompilering omvandlas koden du skrivit först till CIL-kod (Common Intermediate Language) som är ett mellanliggande objektorienterat högnivå-assemblerspråk. CIL hette för övrigt tidigare MSIL (Microsoft Intermediate Language). CIL-koden görs sedan om till körbar programkod med CLR (Common Language Runtime) som utför en så kallad Just-in-time-kompilering.

Detta görs automatiskt när du kör ditt program i terminalen med .NET-kommandot, dotnet run. Om du bara vill kompilera din C#-kod, vilket är lämpligt om du bara vill se om koden följer språkets syntax, använder du istället .NET-kommandot dotnet build. Du behöver inte förstå exakt vad som händer när din C#-kod görs om till exekverbar kod men du bör i stora drag känna till vad som sker.

Image description
Bild: C# kompilering, från C# kod till maskinkod.

C# kompilatorn kallas JIT (Just-In-Time kompilator), och är en central del av hur .NET (och därmed C#) körs.

Kompilering av ett C#-program sker följande i två steg:

  1. Kompilering till CIL (Common Intermediate Language): När du kör dotnet build kompileras C#-koden först till CIL, som är plattformsoberoende. Denna CIL sparas i en .dll eller .exe-fil.

  2. JIT-kompilering vid körning: När du sedan kör programmet:

  • CLR (Common Language Runtime) laddar IL-koden.
  • JIT-kompilatorn översätter IL → maskinkod för din dator precis innan metoderna körs.
    Därför: “Just in time”.

En fördel med JIT-kompilering är att koden optimeras för aktuell CPU (dator) och operativsystem men det tar lite längre tid att starta ett C#-program än ett Python-program.

Det viktiga att ta med sig är att det är ett program kallat kompilator som verifierar din C# kod och översätter den till maskinkod som kan köras på din dator.

.NET är en plattform för programutveckling som utvecklats av Microsoft. Den finns inte bara på Windows utan även på MacOS och Linux.

.NET är en kraftfull plattform som möjliggör effektiv och flexibel programutveckling genom att erbjuda ett brett utbud av verktyg, språk och ramverk som kan anpassas för att möta olika utvecklingsbehov och krav.

.NET-plattformen innehåller ett stort kodbibliotek med bland annat databashantering, filhantering, webbtjänster och algoritmer. Här finns också CLR som utför Just-in-time-kompileringen.

.NET-plattformen behövs för att skapa och köra vårt C# program.

Alla kommandon börjar med dotnet och körs i terminalen. Här är några av kommandona som vi säkert kommer att använda:

  • dotnet new; skapar ett nytt projekt från mallar. Exempel: dotnet new console skapar ett nytt konsolapplikationsprojekt.
  • dotnet build; bygger ett .NET-projekt och dess beroenden, med andra ord kompilerar koden.
  • dotnet run; kompilerar och kör ett .NET-projekt
  • dotnet clean; rensar föregående bygge (build)
  • dotnet test; kör enhetstester i ett .NET-projekt

.NET-projekt och .NET-applikation är olika namn på samma sak.

  • **dotnet add reference <path-to-project** lägger till en referens till ett .NET-projekt
  • **dotnet tool install <tool-name>** installerar ett .NET-verktygspaket
  • dotnet publish: publicerar en .NET-applikation för driftsättning
  • dotnet pack; paketerar en .NET-applikation till en NuGet-paketfil. NuGet är en pakethanterare för .NET som används för att distribuera .NET-bibliotek samt beroenden och versionshantering.

När du deklarerar variabler så behöver du inte allokera plats i minnet för det sköter C# om automatiskt. Likaså rensas minnet automatiskt då det kan finnas oanvända objekt som inte kan nås, så kallad automatisk skräpinsamling. Det är denna automatiska skräpinsamling som gör att C# inte lämpar sig för realtidsapplikationer.

C# har:

  • enhetligt typsystem; alla C#-typer (även enkla värdetyper som int) ärver från object.
  • värdetyper;
    • enkla typer, som int, bool och så vidare.
    • uppräkningstyper, som enum för namngivna konstanter
    • struct-typer; används för att kapsla in data och relaterade metoder
    • nullvärden
    • tupplar, för att gruppera flera dataelement i en enkel struktur
  • användardefinierade referenstyper, som strängtypen
  • nullbara typer; skyddar mot variabler som inte refereras till något objekt
  • undantagshantering; för att hantera oväntade och/eller undantag som inträffar när koden körs.
  • asynkrona åtgärder; för distribuerade system

Då har vi lärt oss följande om C#:

  • C# är ett objektorienterat språk
  • C# programmet kompileras innan det körs
  • C# har automatisk minnes- och skräphantering
  • vi skapar och kör vårt C# program med .NET-plattformen i terminalen