C sharp

C# (lausutaan ) on Microsoftin .NET-alustalle kehitetty ohjelmointikieli. C# julkaistiin kesäkuussa vuonna 2000 ja kehitettiin yhdistämään C++:n tehokkuus ja Visual Basicin tuottavuus. 
C# on vahvasti tyypitetty, eli muuttujille tulee määritellä jokin tietotyyppi, kuten kokonaisluku, luokka tai merkkijono. Kielessä ja kääntäjässä on myös useita ohjelmointivirheitä vähentäviä toimintoja, esimerkiksi alustamattomien muuttujien käytöstä varoitetaan.
Historia.
C#:n kehittäjinä mainitaan Anders Hejlsberg, Scott Wiltamuth ja Peter Golde. Hejlsberg tuli Microsoft-yhtiön palvelukseen Borlandilta. Anders Hejlsberg oli ennen C#:a mukana Turbo Pascalin, Delphin ja J++:n kehitystyössä.
C#:n kehityksen päätavoitteena oli luoda useanlaisiin ympäristöihin soveltuva helppokäyttöinen, oliopohjainen ohjelmointikieli, jonka kansainvälistäminen olisi myös helppoa. C#:n tavoitteena oli lisäksi yhdistää:
Toteutus.
Microsoft on pyrkinyt saamaan C#:lle virallisen standardisoinnin. ISO-standardi ISO/IEC 23270:2003 on julkaistu vuonna 2003. Standardin pohjalta ollaan tekemässä itsenäisiä toteuksia kielestä, esimerkiksi:
Rakenne.
C# on korkeamman tasoinen, olioperusteinen, vahvasti tyypitetty kieli. Vahva tyypitys tarkoittaa, että muuttujilla on oltava aina jokin tietotyyppi, esimerkiksi kokonaisluku, luokka tai merkkijono. (C# kuitenkin mahdollistaa codice_1-sanan käytön, kun tyyppi on niin lukijalle kuin kääntäjällekin selvä.) Korkea abstraktiotaso ilmenee erityisesti siinä, että muistinhallinta on automatisoitu eli automaattinen roskienkeräys vapauttaa muistia käyttöön sitä mukaa, kun objekti ei ole enää ohjelman saavutettavissa.&lt;ref name="dotnet/csharp"&gt;&lt;/ref&gt;
C# muodostuu nimiavaruuksista (codice_2), näissä olevista tyypeistä (esim. codice_3) ja näissä määritellyistä jäsenistä, kuten datasta, funktioista, perustyypistä, rajapinnoista ja operaattoritoteutuksista. Tyyppien avulla luodaan (codice_4) muuttujia, jotka sisältävät referenssin yhteen (arvotyyppi) tai useampaan (referenssityyppi) objektiin.
C#-tyyppijärjestelmä on yhtenäinen ja sen avulla voidaan määritellä
Tyypin jäseniä voivat olla
Luokka- ja rajapintatyyppejä organisoidaan perimähierarkioiksi niin, että kaikkien luokkien käyttämät jäsenet (data ja funktiot) löytyvät hierarkian abstrakteimmasta luokasta ja uudet luokat lisäävät yhä spesifisempiä jäseniä tarpeen mukaan. Tällöin luokkatyyppi määritellään tyylillä codice_19 tai codice_20.
Kaikkia ylätyypin jäseniä ei kuitenkaan ole pakollista periä sellaisenaan (polyformia). Jos esim. ylätyypin metodi on määritelty avainsanalla codice_21, alatyyppi voi määritellä metodin uudelleen codice_22-avainsanalla. Alatyyppi voi myös piilottaa ylätyypin jäsenen käyttämällä codice_4-avainsanaa tai keskeyttää virtuaalisen jäsenen periytymisen codice_24-avainsanalla.
Luokka-, tietue-, rajapinta- ja delegaattityypit hyväksyvät myös parametreja, mikä mahdollistaa geneeristen tyyppien luomisen. Tällöin esim. luokkatyyppi määritellään tyylillä codice_25.
Tyyppien jäsenien näkyvyyttä ja muutettavuutta ohjelmissa säädellään avainsanoilla kuten codice_26, codice_27, codice_28, codice_29, codice_30, codice_31, codice_22, codice_33, codice_21 ja codice_24. 
Lausekkeisiin kuuluvat muun muassa 
Mainittavia operaattoreita ovat esim. codice_58-operaattori, joka palauttaa jälkimmäisen lausekkeen arvon edellisen ollessa codice_59, ja ns. Elvis-operaattori codice_60. 
C# tukee suoraan myös funktionaalisia tekniikoita, vaikka nämäkin perustuvat tyyppeihin. Delegaattityypit mahdollistavat itsenäiset funktiot. Hahmonsovitus onnistuu käyttämällä codice_61 ja codice_37 lausekkeita. Alaviiva-muuttuja ja objekti-dekonstruktio mahdollistavat joustavan sijoittamisen funktioista uusiin muuttujiin. Lambda-lausekkeet ovat kielessä muotoa esim. codice_63. Ennen kaikkea LINQ lisää kieleen hyvin deklaratiivisen menetelmän poimia tietoa datarakenteista lausekkeiden kuten codice_64, codice_65, codice_66, codice_67, codice_68, codice_69 ja codice_70 avulla. (LINQ toimii siis kuin SQL tietokannoissa.) 
Lisäksi kieleen kuuluvat attribuutit, jotka ovat tapa liittää tyyppeihin metadataa. Nämä merkitään ennen haluttua tyyppiä esim. codice_71.
Lähdetiedostot (.cs) käännetään yhdeksi ns. assembly-tiedostoksi (.dll tai .exe), joka sisältää välimuotoista koodia ja metadataa, mikä taas käännetään tarvittaessa prosessorille sopivalle konekielelle. C#-ohjelma aloittaa ajon ylimmän tason lausekkeesta tai codice_72-metodista.
Esimerkki.
Hello World -ohjelma.
// Lähdetiedosto esim. "HelloWorld.cs"
using System;
namespace HelloWorld
 class Program
 static void Main()
 Console.WriteLine("Hello world!");