Programski jezik C sharp

C#[a] je večparadigmatski programski jezik za splošno uporabo, ki obsega močno tipizacijo ter imperativno, deklarativno, funkcijsko, generično, komponentno orientirano in objektno orientirano programiranje z zmožnostjo refleksije. Upravljanje s pomnilnikom temelji na čistilniku spomina.[2][3][4]

C#
Paradigmaobjektno orientirana, strukturirana, imperativna, na podlagi dogodkov, generična, deklarativna, komponentno orientirana, asinhrona, funkcijska, generična, refleksivna, sočasna
Začetna izdaja2001
OblikovalMicrosoft, Anders Hejlsberg[d] in Mads Torgersen[d]
RazvijalecMicrosoft
Stabilna izdaja12.0[1]
Tipizacijastatična, dinamična, močna, varna, nominativna, delno sklepalna
Večje implementacijeVisual C#, ogrodje .NET, Mono, .NET Core, UWP
DialektiCω, Spec#, Polyphonic C#, Enhanced C#
VpliviC, C++, Java, Delphi, Objektni Pascal, Cω (LINQ), Eiffel, F# (async), Haskell, Icon, J#, J++, ML, Modula-3, Rust, VB
Vplival naBoo, Cobra, D, F#, Go, Groovy, JavaScript, Julia, Nim, Ruby, Swift, Kotlin, TypeScript
Običajna končnica datotekecs in csx
Spletna strancsharp.net
DružinaC
Wikibooks logo C Sharp Programming na Wikibooks

C# se pri skladnji zgleduje po številnih drugih programskih jezikih, najbolj izrazito po C/C++ in javi. Jezik je bil skrbno načrtovan z namenom biti čim bolj preprosti in moderni ter uporabiti najboljše značilnosti drugih jezikov in popraviti pomanjkljivosti, ki so se pokazale v njih. Pomemben primer so generični tipi, katerih specifikacija je v C# bolj dodelana kot v javi, kar omogoča bolje optimizirano strojno kodo, večjo varnost pri definiciji tipov (lažje odkrivanje nekonsistentnosti v času prevajanja) ter striktno upoštevanje kovariančnosti in kontravariančnosti.[5][6]

C# je programski jezik, ki cilja na izvajalsko okolje CLI in s tem ogrodje .NET ter njegove različice kot je Mono. Zaradi tega se programi v C# izvajajo v posebnem izvajalskem okolju in se programska koda v tem jeziku šteje za upravljano kodo. Dele programov napisane v C# je zato enostavno povezovati z deli, ki so napisani v kateremkoli drugem programskem jeziku skladnem s CLI, z obstojem prenosljivih implementacij CLI (npr. Mono ali .NET Core) pa imajo programi napisani v C# tudi zelo dobro prenosljivost med različnimi platformami. Zaradi točne specifikacije programskega jezika in vmesnega jezika CIL, se lahko program napisan v C# neposredno prevede in izvede na drugih okoljih, ne da bi bilo treba za prenosljivost program spreminjati. C# je tudi prva izbira za razvijanje iger v igralnem pogonu Unity. Zaradi omenjenih značilnosti, jasne in dodelane skladnje, velike izraznosti (možnost uporabe različnih paradigem) je C# eden najbolj priljubljenih programskih jezikov.[7][8]

Zgodovina

C# je razvilo podjetje Microsoft v okviru razvoja ogrodja .NET z Andersom Hejlsbergom na čelu, ki je pred tem bil glavni oblikovalec Delphi-ja in Turbo Pascal-a. Izdano je bilo okoli leta 2000 z namenom nadomestiti javo. Jezik sta kot mednarodni standard odobrili organizaciji Ecma (ECMA-334) in ISO (ISO/IEC 23270:2006).

Včasih so tudi imeli maskoto Andy-ja imenovan po glavnem oblikovalcu Andersu Hejlsbergu, vendar so ga upokojili leta 2004.[9]

Imenovanje

Med razvojem so za programski jezik uporabljali kratico "Cool" (C-like Object Oriented Language), vendar so jo opustili zaradi marketinških razlogov, ter uporabili ime od prejšnjega nedokončanega projekta iz leta 1988, ki je imelo ime C#.

C# je dobilo navdih za svojo ime preko notnega zapisa, kjer višaj označi, da naj se ton za en polton zviša, podobno kakor v C++-u, kjer "++" označi, da naj se spremenljivka zviša za eno vrednost. Višaj je tudi po zgledu podoben skupku štirih plusov, dvakrat več kot jih ima C++, kar še bolj označi, da je nadgradnja njega. Izgovorjava imena je v angleščini tudi enakoglasnica izraza "see sharp", kar pomeni imeti bister pogled.

Ker se višaj ne pojavi na večina tipkovnic so se odločili uporabiti lojtro za približek temu, kakor je pa tudi zapisano v C# specifikaciji ECMA-334.

Končnica je zaradi tega tudi bila uporabljena v drugih programskih jezikih kakor programski jezik F#.

Različice

RazličicaSpecifikacijaDatum.NETVisual Studio
ECMAISO/IECMicrosoft
C# 1.0December 2002April 2003Januar 2002Januar 2002.NET 1.0Visual Studio .NET 2002
C# 1.1

C# 1.2

Oktober 2003April 2003.NET 1.1Visual Studio .NET 2003
C# 2.0Junij 2006September 2006September 2005[b]November 2005.NET 2.0Visual Studio 2005

Visual Studio 2008

C# 3.0Brez[c]Avgust 2007November 2007

.NET 2.0 (Razen LINQ/Query Extensions)[10]
.NET 3.0 (Razen LINQ/Query Extensions)[10]
.NET 3.5

Visual Studio 2008
C# 4.0April 2010April 2010.NET 4Visual Studio 2010
C# 5.0December 2017December 2018Junij 2013Avgust 2012.NET 4.5Visual Studio 2012
Visual Studio 2013
C# 6.0BrezBrezJulij 2015.NET 4.6

.NET Core 1.0

Visual Studio 2015
C# 7.0Predlog SpecifikacijeMarec 2017.NET 4.7

.NET 4.8

.NET Core 2.0

Visual Studio 2017
C# 8.0Predlog SpecifikacijeSeptember 2019.NET Core 3.0Visual Studio 2019
C# 9.0Predlog SpecifikacijeSeptember 2020.NET 5.0Visual Studio 2019
C# 10.0Predlog SpecifikacijeNovember 2021.NET 6.0Visual Studio 2022

Skladnja

Glavna skladnja C#-a je zelo podobna skladnji C-ja, C++-a in Jave:

  • Konec stavka je označen s podpičjem ;.
  • Stavki so združeni skupaj v zavitih oklepajih { in }.
  • Spremenljivke dobijo vrednost preko enačaja =, zaradi tega je pa operator preverjanja enakosti dvojni enačaj ==.
  • Oglati oklepaji [] se uporabljajo pri tabelah v njihovi deklaraciji in za pridobitev vrednosti na določenem indeksu v njih.

Značilnosti

Podatkovni tipi

C# uporablja združeni sistem za tipizacijo, ki se imenuje Common Type System, kjer je določeno, da je vsak tip podrazred razreda System.Object. Ta sistem razdeli tipe na dve glavni vrsti:[4]

  1. Vrednostni tipi
  2. Referenčni tipi

Vrednostni tipi neposredno vsebujejo podatek in so ponavadi alocirani na skladu. V preverjanju enakosti se vrednostni tipi primerjajo po enakosti podatka.

Referenčni tipi shranjujejo referenco do podatka v pomnilniškem naslovu in so alocirani na kopici.V preverjanju enakosti se referenčni tipi primerjajo po enakosti pomnilniškega naslova (razen, če so operatorji preobteženi kot v primeru System.String).

Zgled:

static void Main(){    // Primer vrednostnih tipov:    int srecna = 7;    double zlatiRez = 1.61;    char velikiC = 'C';    bool jeRes = true;        // Primer referenčnih tipov:    string jezik = "C#";    int[] tabCelih = new int[10];    object mojObjekt = new object();}

Generični tipi

Generični tipi so bili uvedeni v različici 2.0. Generični tipi uporabljajo tipske parametre, ki omogočajo načrtovanje razredov in metod, ki ne specifirajo natančno vseh uporabljenih tipov na ravni definicije, ampak se to zgodi šele pri instanciaciji razreda oziroma klicu metode, torej se lahko razred oziroma metoda pozneje uporabi kot kateregakoli tipa. Na nivoju generične definicije se na tip elementov sklicujemo s tipskim parametrom T.

Zgled:

// Deklaracija generičnega razreda določenega tipa, ki deluje kot// seznam elementov določenega tipa (tip elementov v tem trenutku ni znan)public class GeneričniList<T>{    void Vnos(T vnos) { /* ... */ }}class Program{    private class PrimerRazreda { }    static void Main()    {        // Deklaracija seznama celih števil:        GeneričniList<int> listCelih = new GeneričniList<int>();        // Deklaracija seznama nizov:        GeneričniList<string> listNizov  = new GeneričniList<string>();        // Deklaracija seznama elementov tipa PrimerRazreda:        GeneričniList<PrimerRazreda> listElementov = new GeneričniList<PrimerRazreda>();    }}

Boxing in Unboxing

Boxing je operacija, ki pretvori vrednostni objekt v ustrezni referenčni objekt. Pri C#-u se to lahko zgodi implicitno, brez potrebe varne pretvorbe.

Unboxing je pa operacija, ki pretvori referenčni objekt v ustrezni vrednostni objekt. V tem primeru se pa to zgodi eksplicitno, torej potrebujemo varno pretvorbo.

int vrednostni = 4;                    // vrednostni tipobject referenčni = vrednostni;        // implicitna pretvorba (boxing)int noviVrednostni = (int)referenčni;  // eksplicitna pretvorba (unboxing)

Zgledi

Spodaj je program, ki na konzolo izpiše sporočilo »Pozdravljen, svet!«:

using System;class Program{    static void Main()    {        Console.WriteLine("Pozdravljen, svet!");    }}

Naslednji program isto sporočilo izpiše v novem oknu:

using System.Windows.Forms;class Program{    static void Main()    {        MessageBox.Show("Pozdravljen, svet!");    }}

Glej tudi

C# teme

Integrirana razvojna okolja

Opombe

Sklici

  • Rasheed (2006).
  • Uranič (2015).
  • 4,0 4,1 Lokar; Uranič (2009).
  • »C#: Yesterday, Today, and Tomorrow: An Interview with Anders Hejlsberg]« (v angleščini).
  • »Generics in C#, Java, and C++« (v angleščini).
  • O'Reilly (2006).
  • »State of the Computer Book Market 2008, part 4 — The Languages« (v angleščini).
  • »Andy Retires«. Dan Fernandezov Blog. (angleščina) Blogs.msdn.com. 29. januar 2004. Arhivirano iz prvotnega dne 19. januarja 2012. Pridobljeno 4. oktobra 2012.{{navedi splet}}: Vzdrževanje CS1: bot: neznano stanje prvotnega URL-ja (povezava)
  • 10,0 10,1 »Using C# 3.0 from .NET 2.0« (v angleščini). Danielmoth.com. 13. maj 2007. Pridobljeno 4. oktobra 2012.
  • Viri

    🔥 Top keywords: Glavna stranPosebno:IskanjeFacebookSkrito v rajuPosebno:ZadnjeSpremembeNogometna Liga prvakovSlovenijaSeznam nemških igralcevZodiakMarija AntoanetaKategorija:Slovenski priimkiLjubljanaCarles PuigdemontFreelancerstvoNova24TVSeznam držav članic Evropske unijeYouTubeSeznam mednarodnih klicnih kodReal Madrid Club de FútbolDruga svetovna vojnaSeznam slovenskih slikarjevFrance PrešerenSeznam nemških filozofovDubajSabina KogovšekVolitve poslancev iz Slovenije v Evropski parlament 2024Meta PlatformsNogometRimsko cesarstvoSeznam škotskih fizikovSulejman I.MariborIranMatej ZemljičRadiotelevizija SlovenijaIranske pokrajineHrvaška demokratska skupnostWindows NT 4.0Izrael