Om C-Sharp
🏛️ Historien om C-Sharp
Var en gång i början av 2000-talet… Microsoft behövde ett nytt programmeringsspråk. Något som kunde konkurrera med Java, men som var “mer Microsoft”. Så de skapade C-Sharp (uttalas “C-sharp”, som musiknoten).
🎯 Designfilosofin
Anders Hejlsberg (samme kille som skapade Delphi och TypeScript) ledde utvecklingen. Målet var enkelt: skapa ett språk som var:
- Enkelt som Visual Basic
- Kraftfullt som C++
- Säkert som Java
- Modernt för sin tid
📅 C-Sharp:s evolution genom åren
Här är resan från baby-C-Sharp till dagens kraftpaket:
C-Sharp 1.0 (2002) - Det stora debutet
- Lanserades med .NET Framework 1.0
- Grundläggande objektorientering
- Managed code (minneshantering sköttes automatiskt)
- “Hej världen” för första gången!
C-Sharp 2.0 (2005) - Tonårsproblem lösta
- Generics - nu kunde vi göra
List<string>istället för baraArrayList - Nullable types -
int?betyder “int som kan vara null” - Anonymous methods - små funktioner utan namn
- Partial classes - dela upp stora klasser i flera filer
C-Sharp 3.0 (2007) - LINQ förändrade alles
- LINQ - Query language integrerat i C-Sharp! Magi!
- Lambda expressions -
x => x * 2istället för långa funktioner - Anonymous types -
new { Name = "Marcus", Age = 30 } - Auto-implemented properties -
public string Name { get; set; }
C-Sharp 4.0 (2010) - Dynamisk period
- dynamic keyword - för när du inte vet typen förrän runtime
- Optional parameters -
void Method(string name = "default") - Named arguments -
Method(name: "Marcus", age: 30)
C-Sharp 5.0 (2012) - Asynkron revolution
- async/await - äntligen enkelt att hantera asynkron kod!
- Ingen mer “callback hell”
async Task<string> GetDataAsync()
C-Sharp 6.0 (2015) - Syntaktisk socker
- String interpolation -
$"Hej {name}!"istället förstring.Format - Null-conditional operators -
person?.Name?.Length - Expression-bodied members -
public string FullName => $"{FirstName} {LastName}"; - Auto-property initializers -
public string Name { get; set; } = "Default";
C-Sharp 7.0 (2017) - Pattern matching och tuples
- Tuples -
(string name, int age) = GetPerson(); - Pattern matching -
if (obj is string s) { ... } - Local functions - funktioner inne i andra funktioner
- Out variables -
int.TryParse(input, out var result)
C-Sharp 8.0 (2019) - Nullable reference types
- Nullable reference types - kompilatorn varnar för potentiella null-problem
- Switch expressions -
result = input switch { ... } - Default interface methods - interfaces kan ha implementation
- Async streams -
IAsyncEnumerable<T>
C-Sharp 9.0 (2020) - Records och init
- Records -
public record Person(string Name, int Age); - Init-only properties -
public string Name { get; init; } - Top-level programs - ingen Main-metod behövs för enkla program
- Pattern matching improvements
C-Sharp 10.0 (2021) - Global usings och file-scoped namespaces
- Global using directives -
global using System; - File-scoped namespaces -
namespace MyApp; - Record structs - värdetyper som records
- Constant interpolated strings
C-Sharp 11.0 (2022) - Raw strings och generic math
- Raw string literals -
"""Multi-line strings""" - Generic math - matematik som fungerar med alla siffertyper
- List patterns - pattern matching på listor
- Required members -
public required string Name { get; set; }
C-Sharp 12.0 (2023) - Primary constructors för alla
- Primary constructors - även för vanliga klasser, inte bara records
- Collection expressions -
[1, 2, 3]istället förnew[] { 1, 2, 3 } - Inline arrays - för prestanda-kritiska scenarion
- Lambda default parameters
🚀 Varför C-Sharp är fantastiskt idag
C-Sharp har mognat från ett “Java-copycat” till ett riktigt kraftfullt och modernt språk:
✅ Plattformsoberoende
- Kör på Windows, Mac, Linux
- .NET Core/.NET 5+ är öppen källkod
- Docker-stöd inbyggt
✅ Bred användning
- Web: ASP.NET Core för webbappar
- Desktop: WPF, WinUI för Windows-appar
- Mobile: Xamarin/.NET MAUI för telefoner
- Games: Unity använder C-Sharp
- Cloud: Azure Functions, microservices
- AI/ML: ML.NET för maskininlärning
✅ Stark community
- Enormt ekosystem av bibliotek (NuGet)
- Fantastisk dokumentation
- Aktiv utveckling (ny version varje år)
🎭 Språkets personlighet
Om C-Sharp var en person skulle det vara:
- Pålitlig - du vet vad du får
- Anpassningsbar - funkar i många miljöer
- Balanserad - inte för komplicerat, inte för enkelt
- Modern - håller jämna steg med tiden
- Professionell - seriöst nog för enterprise, kul nog för hobby
😄 Obligatoriskt pappaskämt
Varför heter det C-Sharp? För att C++ var redan taget, och B# lät dumt! 🎵
Du klarar det här! C-Sharp är som en bra vän - lätt att komma igång med, men blir bara bättre ju längre ni känner varandra.