C Sharp

C# (udtales See-sharp på engelsk) er et multi-paradigme programmeringssprog, som omfatter imperativ, funktionel, generisk, objektorienteret (klasse-baseret) og komponent-orienterede programmeringsdiscipliner. C# er designet til at være et enkelt, moderne, generelt anvendeligt, objektorienteret programmeringssprog.

Det bliver udviklet af Microsoft indenfor .NET, og er senere blevet godkendt som en standard af Ecma (ECMA-334) og ISO (ISO/IEC 23270). C# er et af sprogene, som er designet for Common Language Infrastructure (CLI).
C# blev designet af danskeren Anders Hejlsberg. Microsofts C# Compiler Team er ledet af en anden dansker, Mads Torgersen. C# er baseret på programmeringssprogene C++ og Java.

Fra november 2022 er den seneste stabile version af sproget C# 11.0, som blev udgivet i 2022 i .NET 7.0.

Designmål 
Ecma-standarden angiver disse designmål for C#:

 Sproget er beregnet til at være et simpelt, moderne, alment formål, objektorienteret programmeringssprog.
 Sproget og implementeringer deraf bør understøtte softwareteknologiske principper, såsom stærk typekontrol, kontrol af matrixgrænser, detektering af forsøg på at bruge ikke-initialiserede variabler og automatisk affaldsindsamling. Softwarens robusthed, holdbarhed og programmørproduktivitet er vigtige.
 Sproget er beregnet til brug ved udvikling af softwarekomponenter, der er egnede til udrulning i distribuerede miljøer.
 Portabilitet er meget vigtigt for kildekode og programmører, især dem, der allerede er bekendt med C og C++.
 Støtte til internationalisering er meget vigtig.
 C# er beregnet til at være velegnet til at skrive applikationer til både hostede og embedded systemer, lige fra de helt store, der bruger sofistikerede operativsystemer, til de helt små med dedikerede funktioner.
 Selvom C#-applikationer er beregnet til at være økonomiske med hensyn til krav til hukommelse og processorkraft, var sproget ikke beregnet til at konkurrere direkte på ydeevne og størrelse med C eller assemblersprog.

Syntaks 
Kernesyntaksen i C#-sproget ligner den for andre C-sprog, såsom C, C++ og Java, især:

 Semikoloner bruges til at angive slutningen af et udsagn.
 Krøllede parenteser bruges til at gruppere udsagn. Udsagn er almindeligvis grupperet i metoder (funktioner), metoder i klasser og klasser i navneområder.
 Variabler tildeles ved hjælp af et lighedstegn, men sammenlignes med to på hinanden følgende lighedstegn.
 Firkantede parenteser bruges med arrays, både til at erklære dem og for at få en værdi ved et givet indeks i et af dem.

Fordele 
 Let at lære – For en C++/Java-programmør bør det ikke være noget problem at gå over til C#, da syntaksen ligner hinanden. Desuden har .NET et stort kodebibliotek som gør det relativt enkelt at opbygge et grafisk program.
 Flere anvendelsesmuligheder – C# kan både anvendes som kompileringssprog på en lokal computer og som sprog i ASP.NET. Dette gør det enkelt at sammenkoble et program på en computer med en server-side løsning.
 Mulighed for, på simpel vis, at lave løsninger der fx kan integrere med andre Microsoft produkter som Microsoft Office.
 C#-kompileren indgår som standard i installationen af Microsoft.NET og kan anvendes uden nogen som helst licenser og udviklingsværktøjer.
 Har adgang til .NET's bibliotek af værktøjer, en fordel der gælder for alle sprog der kører på .NET platformen.

Ulemper 
 Kan være langsomt – C#/.NET-programmer køres præcis som Java-programmer i en virtuel maskine og kan i opstartsfasen opleves som langsom. Værktøjet ngen.exe som indgår i SDK'et kan anvendes til at præ-kompilere MSIL-koden til ægte maskinkode til den aktuelle processorarkitektur. På den måde starter programmet hurtigt op, da ingen JIT-kompilering længere er nødvendig. Bemærk at .NET-assemblies prækompilerede med ngen.exe starter hurtigere men ofte eksekveres langsommere, da ingen optimering af koden er muligt i så vid udstrækning som ved brug af JIT-kompilering.
 Kræver .NET – De der skal anvende et .NET-program skal som et minimum have det ca. 23 MB store ".NET Framework" installeret på sin computer. .NET 3.0 og tidligere versioner indgår dog som en del af Microsoft Windows Vista.
 Platformsafhængigt – C# er stærkt bundet til Windows selvom .NET-implementationer findes til andre styresystemer som f.eks. Mono til GNU/Linux. .NET Core findes også og virker til både linux og mac men det har også nogle ulemper.

I december 2001 blev C# standardiseret af ECMA (ECMA-334) og i 2003 af ISO (ISO/IEC 23270).

Sprogets navn 

Navnet "C sharp" blev inspireret af musikalsk notation, hvor en "sharp" (krydstegn for node på dansk) angiver, at den skrevne node skal gøres en halvtone (eller semi-tone) højere.
Dette er tilsvarende navngivningen af C++, hvor ++ angiver at en variabel skal øges med 1.

Tilfældigvis ligner den skarpe firkant fire sammensatte plustegn.
Hvor C blev forbedret til C++, blev C++ selv forbedret til C++++ (det vil sige, C#).

Af hensyn til tekniske begrænsninger på displays (standard skrifttyper, browsere osv.) og den omstændighed, at kryds-symbolet (♯, U+266F, Krydstegn for node) ikke findes på gængse tastaturer. Derfor blev nummertegnet (#, U0023, Number Sign) valgt til at repræsentere sharptegnet i programmeringssprogets skrevne navn.
Denne konvention anvendes i ECMA-334 C# Language Specification. Men når det er praktisk muligt at anvende (for eksempel i reklamer, bogomslag og på indpakning), bruger Microsoft det musikalske krydstegn for noder.

Endelsen sharp er blevet brugt af en række andre .NET sprog, der er varianter af eksisterende sprog, herunder J# (et .NET sprog også designet af Microsoft, som er afledt af Java 1.1), A# (fra Ada), og funktionelle F#. Den oprindelige gennemførelse af Eiffel for .NET blev kaldt Eiffel#, et navn der nu er forældet siden hele Eiffel-sproget nu understøttes. Suffikset er også blevet brugt til kodebiblioteker, som f.eks. Gtk# (en .NET indpakning af GTK+ og andre GNOME biblioteker), Cocoa# (en .NET indpakning for Cocoa).

Typografi 
Selvom historien og udtalen af navnet antyder, at navnet burde skrives C♯ – hvilket det også bliver på flere af Microsofts bøger – så skrives det i ECMA's sprogdefinition C#.

Hello World 

Et simpelt "Hello world-program" i C#, der kører i en kommandoprompt på en Windows maskine:

using System;

class HelloWorld
{
    static void Main()
    {
        Console.WriteLine("Hello world!");
    }
}

Ovenstående giver følgende output i kommandoprompten:

 Hello world!

Med variabler 
Ligesom i mange andre programmering sprog så har man noget der hedder "variabler". F.eks. hvis man vil lave en variabel som indeholder tekst, så hedder det en "string" (en steng).

Her er en liste over nogle af de forskellige variabler som er i C#:
string // Kan indeholde tekst
int // Tal fra -2,147,483,648 op til 2,147,483,647
float // Tal fra -3.4 × 10^38 op til +3.4 × 10^38
byte // Tal fra 0 til 255
sbyte // Tal fra -128 til 127

Her er et eksempel på hvordan man kan bruge "string" variabler i et program:
using System;

class HelloWorld
{
    static void Main()
    {
        string Tekst_1 = "Hello";
        string Tekst_2 = "world!";
        Console.WriteLine("{0} {1}", Tekst_1, Tekst_2);
    }
}

Ovenstående giver følgende output i kommandoprompten:

 Hello world!

Kommentarer 

I C# angiver to skråstreger (//), at det efterfølgende skal opfattes som en kommentar af compileren, og derfor ikke skal fortolkes. Dette er en overlevering fra C++:

public class Foo
{
     // Dette er en kommentar
     public static void Bar(int firstParam) { } // En kommentar
}

En kommentar der spænder over flere linjer, indikeres ved brug af skråstreg/stjerne-notation (/*) og afsluttes igen med stjerne/skråstreg (*/). Alt hvad der står i mellem bliver af compileren opfattet som en kommentar. Det bruges ofte til at springe kode over, som måske ikke ønskes afviklet, men måske skal genindsættes senere. Eksempel:

public class Foo
{
     /* En kommentar
        der spænder over flere linjer
     */
     public static void Bar(int firstParam) { } 
}

If 
Når det kommer til programmering i C# samt andre sprog, så kører meget af koden på "if" kommandoer. Her under kan du se hvordan de bruges i selve koden:

using System;

class HelloWorld
{
    static void Main()
    {
        int a = 0;

        if (a == 0)
        {
            Console.WriteLine("Variablen a er 0");
        }
        else
        {
            Console.WriteLine("Variablen a er ikke 0");
        }
    }
}
Så som der ses ovenfor så er det en "hvis" og "hvis ikke". Ovenfor står der: Hvis variablen 'a' er lig med 0, så skal den skrive følgende, ellers så skal den skrive at det ikke er.

Referencer

Eksterne henvisninger 

 C# Sproget (MSDN)
 C# Specifikation
 Microsoft Visual C# .NET
 MCS: Mono C# compiler 

Programmeringssprog