Programski jezik C sharp
![]() | |
Paradigma | objektno orientirana, strukturirana, imperativna, na podlagi dogodkov, generična, deklarativna, komponentno orientirana, asinhrona, funkcijska, generična, refleksivna, sočasna |
---|---|
Začetna izdaja | 2001 |
Oblikoval | Microsoft, Anders Hejlsberg[d] in Mads Torgersen[d] |
Razvijalec | Microsoft |
Stabilna izdaja | 12.0[1] |
Tipizacija | statična, dinamična, močna, varna, nominativna, delno sklepalna |
Večje implementacije | Visual C#, ogrodje .NET, Mono, .NET Core, UWP |
Dialekti | Cω, Spec#, Polyphonic C#, Enhanced C# |
Vplivi | C, C++, Java, Delphi, Objektni Pascal, Cω (LINQ), Eiffel, F# (async), Haskell, Icon, J#, J++, ML, Modula-3, Rust, VB |
Vplival na | Boo, Cobra, D, F#, Go, Groovy, JavaScript, Julia, Nim, Ruby, Swift, Kotlin, TypeScript |
Običajna končnica datoteke | cs in csx |
Spletna stran | csharp |
Družina | C |
![]() |
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# 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
[uredi | uredi kodo]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
[uredi | uredi kodo]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čini 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
[uredi | uredi kodo]Skladnja
[uredi | uredi kodo]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
[uredi | uredi kodo]Podatkovni tipi
[uredi | uredi kodo]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]
- Vrednostni tipi
- 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
[uredi | uredi kodo]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
[uredi | uredi kodo]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 tip
object referenčni = vrednostni; // implicitna pretvorba (boxing)
int noviVrednostni = (int)referenčni; // eksplicitna pretvorba (unboxing)
Zgledi
[uredi | uredi kodo]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
[uredi | uredi kodo]
|
|
Opombe
[uredi | uredi kodo]- ↑ Po dogovoru se uporablja kot drugi znak imena jezika znak '#' - znak za število, ASCII vrednost 35 (desetiško oz. 23 šestnajstiško), Unicode U+0023 oziroma HTML #. Gre za drug znak kot tisti, s katerim se označuje višaj v glasbi (npr. nota C♯ oz. Cis) in ima vrednost U+266F oziroma HTML ♯.
- ↑ Microsoftova specifikacija C# 2.0 vsebuje le nove značilnosti raličice 2.0. Starejše značilnosti so vsebovane v specifikaciji 1.2 (zgoraj).
- ↑ Za C# 3.0 in 4.0 ne obstajajo specifikacije ECMA ali ISO/IEC.
Sklici
[uredi | uredi kodo]- ↑ Announcing C# 12
- ↑ 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
[uredi | uredi kodo]- Lokar, Matija; Uranič, Srečo (2009). »Programiranje 1« (PDF). Univerza v Ljubljani. Arhivirano iz prvotnega spletišča (PDF) dne 29. aprila 2016. Pridobljeno 29. aprila 2016.
- O'Reilly, Tim (2. avgust 2006). »Programming Language Trends« (v angleščini). O'Reilly Radar. Pridobljeno 14. junija 2013.
- Rasheed, Faraz (december 2006). »C# School« (v angleščini). Programmerís Heaven. Pridobljeno 30. aprila 2016.
{{navedi splet}}
: Preveri vrednost|archive-url=
(pomoč)Vzdrževanje CS1: samodejni prevod datuma (povezava) - Uranič, Srečo (5. junij 2015). »C# .NET« (PDF). Arhivirano iz prvotnega spletišča (PDF) dne 5. junija 2015. Pridobljeno 5. junija 2015.