C# is een moderne, multi-paradigma programmeertaal ontwikkeld door Microsoft binnen zijn .NET-framework. De taal is voornamelijk gericht op softwareontwikkeling voor Windows en webapplicaties en combineert sterke typing, imperatieve en objectgeoriënteerde programmeer (OOP) functies met functionele programmeermogelijkheden. Het staat algemeen bekend om zijn leesbaarheid, veelzijdigheid en robuuste ontwikkelingsondersteuning, waardoor het een favoriet is onder bedrijfsontwikkelaars en gameprogrammeurs, vooral in combinatie met de Unity-game-engine.
C# werd in de vroege jaren 2000 gecreëerd door Anders Hejlsberg en zijn team bij Microsoft als onderdeel van het .NET-initiatief. De taal is ontworpen om de productiviteit te verbeteren door een eenvoudige, moderne, objectgeoriënteerde programmeertaal te bieden die goed integreert met het Microsoft-ecosysteem. De invloed van eerdere talen, zoals Java en C++, is duidelijk zichtbaar in de structuur.
De eerste versies van C# waren nauw verbonden met het .NET-framework, dat tot doel had ontwikkelaars een uitgebreide set bibliotheken en tools te bieden voor het bouwen van applicaties. C# versie 1.0 werd gelanceerd samen met het .NET Framework in 2002. In de loop der jaren zijn er aanvullende functies en verbeteringen geïmplementeerd, waarbij C# aanzienlijk is geëvolueerd door verschillende iteraties.
De release van .NET Core in 2016 markeerde een belangrijke mijlpaal, waardoor C# platformonafhankelijk werd en zijn veelzijdigheid vergrootte. Latere versies, waaronder C# 7.0 en verder, introduceerden functies zoals tuples, patroonmatching en async streams, waardoor de taal verder werd verbeterd. Tegenwoordig staat C# aan de voorhoede van moderne softwareontwikkeling, ondersteund door een levendige gemeenschap en continue updates in het .NET-ecosysteem.
C# is een statisch getypeerde taal, wat betekent dat de variabele types bekend zijn op compileertijd. Deze functie verbetert de prestaties en voorkomt bepaalde soorten runtime-fouten.
int number = 10;
string text = "Hallo, C#";
C# ondersteunt volledig OOP-concepten, waardoor ontwikkelaars klassen en objecten kunnen maken, gegevens kunnen encapsuleren en gebruik kunnen maken van overerving en polymorfisme.
class Dier {
public void Spreek() {
Console.WriteLine("Dier spreekt");
}
}
class Hond : Dier {
public void Spreek() {
Console.WriteLine("Hond blaft");
}
}
C# staat het gebruik van eigenschappen toe, waardoor een betere encapsulatie van klasgegevens mogelijk is, terwijl er gemakkelijke toegang is voor het verkrijgen en instellen van waarden.
class Persoon {
private string naam;
public string Naam {
get { return naam; }
set { naam = value; }
}
}
C# ondersteunt delegates, die type-veilige functiepointers zijn, en evenementen voor het implementeren van event-driven programming.
public delegate void Notify(); // Delegate
public class Proces {
public event Notify ProcesVoltooid; // Evenement
public void StartProces() {
// Proceslogica
ProcesVoltooid?.Invoke(); // Evenement oproepen
}
}
C# biedt LINQ, een krachtige functie die het mogelijk maakt om collecties op een beknopte en leesbare manier te doorzoeken.
var nummers = new List<int> { 1, 2, 3, 4, 5 };
var evenNummers = from n in nummers where n % 2 == 0 select n;
C# vereenvoudigt asynchrone programmering met behulp van de async- en await-trefwoorden, waardoor de prestaties voor I/O-gebonden taken worden verbeterd.
public async Task<string> HaalDataAsync() {
using (var client = new HttpClient()) {
return await client.GetStringAsync("http://example.com");
}
}
Extensie methodes stellen ontwikkelaars in staat om "nieuwe" methodes toe te voegen aan bestaande types zonder hun broncode te wijzigen.
public static class MijnExtensies {
public static int WoordTelling(this string str) {
return str.Split(' ').Length;
}
}
C# ondersteunt nullable waarde types, waardoor de representatie van gegevens die afwezig kunnen zijn mogelijk is.
int? nullableInt = null;
C# biedt ingebouwde ondersteuning voor tuples, waardoor encapsulatie van meerdere waarden mogelijk is.
var persoon = (Naam: "John", Leeftijd: 30);
Console.WriteLine($"{persoon.Naam} is {persoon.Leeftijd} jaar oud.");
De .NET SDK is de kernset van tools voor het ontwikkelen van applicaties in C#. Het omvat de CLR (Common Language Runtime), bibliotheken en compilers die nodig zijn voor het uitvoeren en compileren van C#-code.
Visual Studio is de belangrijkste IDE voor C#-ontwikkeling, met geavanceerde debugging, IntelliSense en een uniforme omgeving voor het bouwen en implementeren van applicaties. Andere populaire opties zijn JetBrains Rider en Visual Studio Code, die met de juiste extensies kunnen worden aangepast voor C#-ontwikkeling.
Om een C#-project te bouwen met behulp van de .NET CLI, kan men commando's zoals dotnet new
gebruiken om een nieuw project te maken, dotnet build
om de code te compileren, en dotnet run
om de applicatie uit te voeren. Het proces van het maken van een console-applicatie zou er als volgt uitzien:
dotnet new console -n MijnConsoleApp
cd MijnConsoleApp
dotnet run
C# wordt gebruikt in een breed scala aan applicaties, waaronder:
C# is een krachtige taal in vergelijking met andere. Hier zijn enkele opmerkelijke overeenkomsten en verschillen:
Het vertalen van code tussen C# en andere talen kan vaak worden vergemakkelijkt door bron-naar-bron tools, vaak bekend als transpilers. Bijvoorbeeld, tools zoals SharpKit kunnen C#-code omzetten naar JavaScript voor webapplicaties, terwijl Bridge.NET het mogelijk maakt om C# te compileren naar JavaScript of HTML5-applicaties.
In meer gespecialiseerde scenario's bestaan er bibliotheken en tools die C# naar andere talen zoals Java of Python converteren, vaak met een focus op specifieke taalfeatures en paradigma's om een effectieve conversie te waarborgen.
Bijvoorbeeld, bij het vertalen van C# naar Python moet de ontwikkelaar ervoor zorgen dat het type-systeem en de geheugenbeheerpraktijken worden aangepast, aangezien de dynamische typing en garbage collection principes van Python verschillen van de statische typing en beheerde runtime van C#.
Bestaande tools die verschillende codevertalingen vergemakkelijken zijn onder andere CodePorting voor het converteren van .NET-applicaties naar Java en Jitterbit voor bredere integratieoplossingen. Elke tool heeft zijn sterke punten, en de keuze hangt af van de specificaties van het project en de gewenste resultaten.