C#, vyslovované anglicky jako C Sharp, což znamená doslova notu CIS v hudbě, je vysokoúrovňový objektově orientovaný programovací jazyk, který byl vyvinut firmou Microsoft současně s platformou .NET Framework. Později byl jazyk schválený standardizačními komisemi ECMA a ISO. Jazyk C# vychází z jazyků C++ a Javy, je tedy nepřímým potomkem jazyku C, ze kterého v mnohém čerpá jeho syntaxe.
C# je možné uplatnit při tvorbě:
Cíle jazyka
Na základě standardu ECMA je současný design C# definovaný následujícím způsobem:
Jedná se o jednoduchý, moderní, mnohoúčelový a objektově orientovaný programovací jazyk.
Jazyk včetně jeho implementací si dává za cíl poskytnout podporu pro principy softwarového inženýrství, mezi které patří například hlídání hranic polí, detekce použití neinicializovaných proměnných nebo automatický garbage collector.
Zásadní jsou mimo jiné vlastnosti jako je robustnost, trvanlivost a programátorská produktivita.
Jazyk se hodí pro vývoj softwarových komponent, které jsou distribuovány napříč různými prostředími.
Podstatná je přenositelnost zdrojového kódu, především pro programátory, kteří pracují také s C a C++.
Zásadní je rovněž mezinárodní podpora.
C# je designován tak, aby byl vhodný pro psaní aplikací pro zařízení se sofistikovanými systémy i pro zařízení s omezenými možnostmi.
Přestože procesorovým časem ani pamětí by neměly programy psané v C# plýtvat, nemohou se v těchto oblastech měřit s aplikacemi psanými v C nebo v jazyce symbolických adres.
Vlastnosti jazyka
V rámci C# není možné použít vícenásobnou dědičnost – proto každá třída může být potomkem maximálně jedné třídy. Toto rozhodnutí přijali vývojáři z toho důvodu, aby mohli předejít komplikacím a přílišné složitosti, která se s vícenásobnou dědičností pojí.
Třída může implementovat neomezený počet rozhraní.
Neexistují globální proměnné ani metody. Všechny metody i proměnné je nutné definovat v rámci tříd. Za náhradu globálních proměnných a metod lze považovat statické metody a proměnné veřejných tříd.
Objektově orientované programování často využívá vzor, kdy se k datovým atributům třídy dá přistupovat zvenčí pouze nepřímo z důvodu dodržení principu zapouzdření. Používají se k tomu dvě metody: metody get (accessor) a metody set (mutator). C# místo toho umožňuje nastavení tzv. property, která funguje navenek jako datový atribut, ale uvnitř obsahuje prostor pro definici jak metody get, tak metody set. Výhodou tohoto řešení je jednodušší práce s datovým atributem při současném zachování principu zapouzdření.
C# je obecně bezpečnější nežli C++. Implicitní konverze jsou předdefinované jen takové, které lze považovat za bezpečné. Jako příklad může posloužit rozšiřování celočíselných typů (například z 32bitového na 64bitový) nebo konverze z odvozeného typu na typ rodičovský. Implicitní konverze z celočíselných typů na boolean však neexistuje, stejně jako implicitní konverze mezi výčtovými a celočíselnými typy.
C# nevyžaduje ani neobsahuje dopřednou deklaraci – pořadí deklarace metod není podstatné.
Jazyk C# je case sensitive, tedy rozlišuje mezi velkými a malými písmeny. Identifikátory „hodnota“ a „Hodnota“ tak v tomto případě nejsou na rozdíl od VB .NET ekvivalentní.
Historie
Během vývoje frameworku .NET byly původně knihovny tříd psány pomocí Simple Managed C (SMC). V lednu 1999 vytvořil Anders Hejlsberg tým, aby sestavil nový jazyk, který se v té době nazýval Cool, což byla zkratka pojmenování „C-like Object Oriented Language“. Microsoft zvažoval, že tento název ponechá jako finální pojmenování jazyka, ale z důvodu ochranných známek od tohoto záměru upustil. Když byl .NET projekt veřejně oznámen na konferenci vývojářů v červenci 2000, jazyk byl pojmenován C# a knihovny tříd byly přeneseny do C#.
Hejlsberg je hlavním designerem C# a vedoucím architektem v Microsoftu. V rámci rozhovorů, které poskytl, prohlásil, že nedostatky většiny hlavních programovacích jazyků vedly ke vzniku Common Language Runtime, což následně vedlo ke vzniku C#.
James Gosling, který v roce 1994 vytvořil programovací jazyk Java a Bill Joy, spoluzakladatel Sun Microsystems, označili C# za imitaci Javy.
Od releasu C# 2.0 v listopadu 2005 se vývoj C# a Javy výrazně odchýlil, čímž se z nich staly dva velmi odlišné jazyky.