Movatterモバイル変換


[0]ホーム

URL:


Przejdź do zawartości
Wikipediawolna encyklopedia
Szukaj

C Sharp

Z Wikipedii, wolnej encyklopedii
Właściwy tytuł tego artykułu toC#. Z powoduograniczeń technicznych tytuł wyświetlany na górze strony jest nieprawidłowy.
C#
Logo języka C#
Logo języka
Pojawienie się

lipiec 2000

Paradygmat

wieloparadygmatowy

Implementacje

C#

Aktualnawersja stabilna

14.0[1] (11 listopada 2025; około 3 miesiące temu)

Twórca

Anders Hejlsberg

Platforma sprzętowa

wieloplatformowy

Platforma systemowa

Microsoft Windows:.NET Framework
wieloplatformowy:.NET Core,ASP.NET,Unity,Xamarin,Blazor,Mono,DotGNU

Książki w Wikibooks
Strona internetowa

C#[2] (C Sharp; wym.[siːˈʃɑːp]; dosłownie „cis”, „c zkratką”) –wieloparadygmatowyjęzyk programowania zaprojektowany w latach 1998–2001 przez zespół pod kierunkiemAndersa Hejlsberga dla firmyMicrosoft.

Program napisany w tym językukompilowany jest do językaCommon Intermediate Language (CIL), specjalnegokodu pośredniego wykonywanego w środowisku uruchomieniowym takim jak.NET Framework,.NET Core,Mono lubDotGNU.Wykonanie skompilowanego programu przezsystem operacyjny wymaga zainstalowanego środowiska uruchomieniowego[3] lub zawarcia go w dystrybuowanej aplikacji (tzw. aplikacja typuself-contained)[4]. Począwszy od wersji środowiska .NET 7, aplikacje mogą być także kompilowane w wersji natywnej dla wybranej platformy[5].

Nazwa

[edytuj |edytuj kod]

Nazwa języka powstała analogicznie jak nazwaC++. Operator ++ wjęzyku C (w C++ też) oznacza zwiększenie o jeden, więc C++ to więcej niż C. Autorzy C# wykorzystali podobny pomysł, gdzie symbol krzyżyka/kratki przypomina cztery połączone ze sobą operatory +. W muzyce dźwięk C♯ jest wyższy niż dźwięk C, może to sugerować, że język jest rozwinięciem C/C++[6].

Symbol♯ (krzyżyk) jest niedostępny na większości klawiatur, niektórych czcionkach iprzeglądarkach internetowych, dlatego zalecane jest używaniesymbolu kratki (#), który bardzo przypomina symbol muzyczny. Czasami tam gdzie ma to uzasadnienie np. w materiałach promocyjnych, Microsoft używa nazwy C♯ zamiast C#[7].

Cechy języka

[edytuj |edytuj kod]

Język C# ma wiele cech wspólnych z językami programowaniaObject Pascal,Delphi,C++Java.

  • obiektowość z hierarchią o jednym elemencie nadrzędnym: podobnie jak w Javie, kod programu jest zbiorem klas. W C#, podobnie jak w Javie/Object Pascalu, hierarchia dziedziczenia opiera się na istnieniu jednej klasyObject (System.Object), która stanowi element nadrzędny tej hierarchii. W szczególności oznacza to, że również typy proste (int,double, itd.) są strukturami z właściwymi sobie metodami, np.inti=1;strings=i.ToString();
  • odśmiecanie pamięci: zarządzaniem pamięcią zajmuje się środowisko uruchomieniowe. Oznacza to, że nie ma potrzeby samodzielnego zajmowania się zwalnianiem pamięci po obiektach, które przestają być używane
  • właściwości,indeksery: dodatkowe elementy składoweklas
  • delegaty,zdarzenia: odpowiedniki i rozwinięciewskaźników na funkcje zC++
  • refleksje i atrybuty klas: w czasie pracy programu istnieje możliwość analizy struktury kodu z poziomu tego kodu. Umożliwia to tworzenie wysoce uniwersalnych mechanizmów operujących na strukturze kodu nieznanej w czasie kompilacji. Mechanizm ten wykorzystywany jest m.in. w bibliotekachORM, narzędziach do analizy i weryfikacji kodu czy rozszerzeniachAOP. Mechanizm atrybutów został z C# zapożyczony do językaJava w wersji 1.5 (adnotacje), jakkolwiek samo Reflection API istniejące od pierwszego wydania języka stanowiło inspirację dla twórców C#
  • typy ogólne (generics – dostępne od wersji.NET 2.0): mechanizm zbliżony swoją ogólnością doszablonów w C++, jednak tu typ ogólny jest przenoszony domodułu binarnego i możliwy jest do wykorzystania bez konieczności posiadaniakodu źródłowego
  • dynamiczne tworzenie kodu: biblioteki.NET umożliwiają dynamiczne tworzenie kodu w czasie działania programu i włączanie go do kodu aktualnie wykonywanego. Możliwe jest zarówno dynamiczne tworzenie kodu wykonywalnego ze źródeł C# jak i tworzenie dynamicznych modułów w języku pośrednim (CIL).
  • bogata biblioteka klasBCL, umożliwiająca rozwijanie aplikacji konsolowych, okienkowych (System.Windows.Forms oraz WPF od .NET Framework 3.0), bazodanowych (ADO.NET), sieciowych (System.Net), w architekturze rozproszonej (WebServices) czy dynamicznych aplikacji internetowych (ASP.NET) oraz dynamiczne treści multimedialne (Silverlight).
  • W C#, podobnie jak w C stosuje się dwa rodzajekomentarzy:
    1. // to komentarz jednoliniowy, czyli wszystkiego, co znajduje się za nim, kompilator nie bierze pod uwagę.
    2. Komentarz wielowierszowy zaczyna się od/* a kończy*/. Kompilator nie bierze pod uwagę tego, co znajduje się pomiędzy.

Jeśli komentarz zaczyna się od/// lub/**, to jest to komentarz, w którym umieszcza się dokumentację do kodu.

C# 2.0

[edytuj |edytuj kod]

Rozszerzenia do języka C# zostały przedstawione przez Microsoft w roku 2005 wraz z prezentacją.NET Framework 2.0 orazVisual Studio 2005.

Najważniejsze z rozszerzeń to:

Kopiec zaimplementowany przy pomocy szablonu klasy:

publicclassKopiec<T>{privateT[]tablica;// konstruktorpublicKopiec(T[]tablica){...}// wstawianie nowego elementu do kopcapublicvoidWstaw(Telem){...}}
  • słowo kluczoweyield.
  • typy częściowe – umożliwiają rozbicie klasy, struktury lub interfejsu do wielu plików źródłowych. Klasa częściowa wymaga użycia słowa kluczowegopartial.
  • metody anonimowe – pozwalają na tworzenie funkcji „w miejscu”. Funkcje takie umożliwiają związanie kodu funkcji bezpośrednio z instancją delegata. Oznacza to, że te funkcje nie mają nazwy i mogą być wywołane jedynie przez wywołanie delegata.
someButton.Click+=delegate{MessageBox.Show("Wciśnięto przycisk");};
  • typy Nullable – to typ prosty, który łączy wartości swojego typu podstawowego z dodatkowym oznaczeniem braku wartości (null). Typy te są tworzone przez połączenie nazwy typu prostego ze znakiem ‘?’ np. int?, float?. Głównym zastosowaniem tych typów jest współpraca z bazami danych. Reprezentują one wartości uzyskane zbazy danych, uwzględniając możliwość nie istnienia danej wartości w bazie.

C# 3.0

[edytuj |edytuj kod]
  • Słowa kluczowe "select,from,where" pozwalające na dostęp doSQL,XML, kolekcji i innych (Language integrated query (LINQ))
  • Proste inicjowanie obiektów:Klientk=newKlient();k.Imie="Jan"; staje sięKlientk=newKlient(){Imie="Jan"};
  • wyrażenia lambda:listOfFoo.Where(delegate(Foox){returnx.size>10;}) staje sięlistOfFoo.Where(x=>x.size>10);
  • Typy domniemane:varx="hello"; oznacza to samo, costringx="hello";
  • Typy anonimowe:varx=new{Imie="Jan"}
  • Automatycznie generowane właściwości:publicstaticintLiczba{get;internalset;}
  • Rozszerzanie typów – dodawanie nowych metod do istniejących klas bez potrzeby ich dziedziczenia.

C# 3.0 przedstawiono na PDC 2005. Jest obsługiwany przez środowiskoVisual Studio 2008, a jego kompilator jest częścią platformy.NET Framework 3.5.

C# 4.0

[edytuj |edytuj kod]
  • Obsługa języków dynamicznych dzięki słowu kluczowemudynamic.
  • Obsługa kontra- i kowariancji.
  • Opcjonalne słowo kluczoweref dla wywołań metod obiektów COM.
  • Parametry opcjonalne i argumenty nazwane.

Jest obsługiwany przez środowiskoVisual Studio 2010, a jego kompilator jest częścią platformy.NET Framework 4.0.

C# 5.0

[edytuj |edytuj kod]

Nowe elementy języka[8][9]:

  • Słowa kluczoweawait iasync ułatwiające programowanie asynchroniczne.
  • Nowy atrybutCallerInfo umożliwiający uzyskanie szczegółowych informacji o wywołaniu metod.

C# 6.0

[edytuj |edytuj kod]
  • Możliwość użycia słów kluczowych async/await w blokach catch/finally
  • Nowa dyrektywa preprocesoranameof
  • Null propagation(inne języki)
  • Dodano filtry wyjątków w blokucatch
  • Dodaną nowy sposób na formatowanie łańcuchów znaków - String Interpolation

C# 7.0

[edytuj |edytuj kod]
  • Możliwość tworzenia funkcji lokalnych (definiowanych wewnątrz innych funkcji)
  • Value Tuples
public(stringname,intage)GetStudentInfo(){return(name:"Annie",age:25);}var(name,age)info=GetStudentInfo();
  • ref return - zwracanie poprzez referencję (ma głównie wartość wydajnościową, np. przy dużych strukturach).
publicclassScore{privateintvalue=5;publicrefintGet(){returnrefthis.value;}}
  • ref locals
  • pattern matching - umożliwia sprawdzanie, czy zmienna jest danego typu i, jeśli tak, przypisanie tej wartości do nowej zmiennej typu docelowego. Możliwe jest również dołączanie dodatkowych warunków za pomocą słowa kluczowegowhen
publicstaticdoubleComputeArea_Version4(objectshape){switch(shape){caseSquareswhens.Side==0:caseCirclecwhenc.Radius==0:caseTriangletwhent.Base==0||t.Height==0:caseRectanglerwhenr.Length==0||r.Height==0:return0;}}

C# 7.1

[edytuj |edytuj kod]
  • async Main
  • Uproszczone korzystanie zdefault
privatestaticintNewMethodWithArgs(inti=default,objecto=default){returndefault;}
  • Uproszczone korzystanie z Value Tuples
intcount=5;stringlabel="Colors used in the map";varpair=(count,label);// zmienna pair będzie posiadać dwa elementy: pair.count oraz pair.label

C# 8.0

[edytuj |edytuj kod]

Jest obsługiwany przez środowisko Visual Studio 2019, a jego kompilator jest częścią platformy .NET Core 3.x[10][11].

  • Elementy członkowskie tylko do odczytu
  • Domyślne metody interfejsu
  • Ulepszenia dopasowania wzorca:
    • Przełączanie wyrażeń
    • Wzorce właściwości
    • Wzorce krotki
    • Wzorce pozycyjne
  • Używanie deklaracji
  • Statyczne funkcje lokalne
  • Indeksy i zakresy
varzdanie=newstring[]{// indeks od początku   indeks od końca"Ala",// 0                    ^7"ma",// 1                    ^6"kota",// 2                    ^5"a",// 3                    ^4"kot",// 4                    ^3"ma",// 5                    ^2"Alę.",// 6                    ^1};// 7 (lub words.Length) ^0Console.WriteLine($"Ostatnie słowo w zdaniu to {zdanie[^1]}");// program wypisze "Alę."

C# 9.0

[edytuj |edytuj kod]

Jest obsługiwany przez środowisko Visual Studio 2019, a jego kompilator jest częścią platformy .NET 5.0[12][13].

  • Wprowadzono typy rekordów
    publicrecordOsoba{publicstringImie{get;set;}publicstringNazwisko{get;set;}};
    publicrecordOsoba(stringImie,stringNazwisko);
  • Niemutowalne właściwości w obiektach
    publicclassOsoba{publicintWiek{get;init;}}
  • Instrukcje najwyższego poziomu
  • Ulepszone dopasowanie do wzorca
  • Wydajność i współdziałanie

C# 10.0

[edytuj |edytuj kod]

Jest obsługiwany przez środowisko Visual Studio 2022, a jego kompilator jest częścią platformy .NET 6.0[14][15]

  • Wprowadzonoglobal using, który umożliwia wszystkim plikom projektu dostęp do przestrzeni nazw określonych z tym dopiskiem.
  • Wprowadzono deklarację przestrzeni nazw o zakresie pliku.
  • Ulepszono wyrażenie lambda.
  • Rekordy mogą mieć zapieczętowane ToString.
  • Ciągi interpolowane jako stałe.

C# 11.0

[edytuj |edytuj kod]

Jest obsługiwany przez środowisko Visual Studio 2022, a jego kompilator jest częścią platformy .NET 7[16][17][18]

  • Dodanie atrybutów generycznych
  • Możliwość oznaczania właściwości i pól z użyciem modyfikatorarequired
  • Nowe linie w interpolacjach ciągów znaków
  • Aliasy dla IntPtr i UIntPtr
  • Rozszerzony zakresnameof

C# 12.0

[edytuj |edytuj kod]

Jest obsługiwany przez środowisko Visual Studio 2022, a jego kompilator jest częścią platformy .NET 8[19][20]

  • Dodanie konstruktorów podstawowych
    publicclassOsoba(stringimie){publicstringImie=>imie;}
  • Wyrażenia kolekcji
    int[]numbers=[1,2,3,4];List<string>strings=[];
  • Tablice wbudowane
  • Aliasy dla dowolnych typów
  • Przechwytywanie kodu
  • Atrybut eksperymentalny

C# 13

[edytuj |edytuj kod]

C# 13 jest wspierany na platformie .NET 9[21]

  • Nowy typ i semantykalock
  • Typyref struct mogą implementować interfejsy
  • Właściwości i indeksery częściowe
  • Autorzy bibliotek mogą teraz określać priorytety rozdzielczości przeciążeń, co pozwala na bardziej precyzyjne kontrolowanie, która wersja metody zostanie wywołana
  • Modyfikatorparams może być używany z większą liczbą typów kolekcji, nie tylko z tablicami

C# 14

[edytuj |edytuj kod]

C# 14 jest wspierany na platformie .NET 10[21]

  • Nowa składnia elementów rozszerzających (extension members), umożliwiająca definiowanie właściwości rozszerzających oraz statycznych rozszerzeń dla typów:
    publicstaticclassRozszerzenia{// Rozszerzenie typu (statyczne)extension(string){publicstaticboolIsString(objecto)=>oisstring;}}
  • Słowo kluczowefield, umożliwiające dostęp do automatycznie generowanego pola zapasowego (backing field) wewnątrz właściwości (zamiast jego własnoręcznego tworzenia):
    publicstringMessage{get;set=>field=value??thrownewArgumentNullException(nameof(value));}
  • Przypisanie warunkowe null - operator?. może być używany po lewej stronie przypisania (kod wykonuje się tylko, gdy obiekt nie jest nullem):
    klient?.Adres="Kraków";
  • Niejawne konwersje dla typów Span
  • Generyczne nazwy w nameof (np.nameof(List<>) bez podawania typu generycznego)
  • Modyfikatory w wyrażeniach lambda - możliwość dodawania modyfikatorów (np. ref, out) do parametrów lambdy bez określania ich typów
  • Częściowe (partial) konstruktory i zdarzenia

Przykładowe programy

[edytuj |edytuj kod]

Prosty program napisany w języku C#. Po jego skompilowaniu i uruchomieniu wyświetlony zostanie napis"Podaj swoje imię: ". Po pobraniu imienia od użytkownika, zostanie ono wyświetlone w następnej linii.

usingSystem;publicclassPrzykladowaKlasa{publicstaticvoidMain(){Console.WriteLine("Podaj swoje imię:");stringimie=Console.ReadLine();Console.WriteLine($"Twoje imię to: {imie}");Console.WriteLine("Wciśnij dowolny klawisz by zakończyć program.");Console.ReadKey();}}

Inny program symulujący uniwersalną kostkę do gry, można w nim zobaczyć kilka podstawowych instrukcji języka C# oraz wykorzystanie funkcji instrukcji najwyższego poziomu.

intkostka;Randomliczba=new();stringinput=string.Empty;Console.Clear();while(true){Console.Write("Iluścienną kostką chcesz grać? ");try{kostka=int.Parse(Console.ReadLine());}catch{Console.WriteLine("Podano nieprawidłowe dane!");kostka=0;}if(kostka<4){Console.WriteLine("Kostka ma minimum 4 ściany.");}elsebreak;}Console.Clear();while(!input.Equals("q")){Console.WriteLine($"Wylosowana liczba to: {liczba.Next(kostka) + 1}\tAby zakończyć wciśnij Q + Enter");input=Console.ReadLine();}

Przykładowy program który działa jak stoper i aktualizuje się co sekundę:

usingSystem;usingSystem.Threading;classStopwatch{staticvoidMain(){intseconds=0;while(true){Console.Clear();// Wyczyść konsolę, aby zaktualizować czas na tym samym miejscuConsole.WriteLine("Czas: {0} sekund",seconds);Thread.Sleep(1000);// Poczekaj 1 sekundęseconds++;// Zwiększ licznik sekund o 1}}}

Zobacz też

[edytuj |edytuj kod]
Zobacz publikację
C Sharp w Wikibooks

Inne języki platformy .NET:

Platforma .NET:

Przypisy

[edytuj |edytuj kod]
  1. Announcing .NET 10 - .NET Blog. devblogs.microsoft.com, 2025-11-11. [dostęp 2026-02-05]. (ang.).
  2. Home - Ecma International [online], ecma-international.org [dostęp 2021-01-17] [zarchiwizowane zadresu 2003-08-03] (ang.).
  3. A Tour of C# - C# Guide | Microsoft Docs. docs.microsoft.com, 2021-01-28. [dostęp 2021-08-11]. (ang.).
  4. Trim self-contained applications - .NET | Microsoft Docs. docs.microsoft.com, 2020-04-03. [dostęp 2021-08-11]. (ang.).
  5. .NET 7 Preview 3 Is All About Native AOT. visualstudiomagazine.com, 2022-04-15. [dostęp 2024-04-06]. (ang.).
  6. Naomi Hamilton: The A–Z of Programming Languages: C#. Computerworld, 2008-10-01. [dostęp 2016-10-24]. [zarchiwizowane ztego adresu (2015-04-02)]. (ang.).
  7. https://web.archive.org/web/20170622073304/https://www.microsoft.com/presspass/images/gallery/boxshots/web/visual-c-sharp03.jpg
  8. An Introduction to New Features in C# 5.0 – Microsoft MVP Award Program Blog [online], blogs.msdn.com [dostęp 2017-11-22] [zarchiwizowane zadresu 2013-04-27] (ang.).
  9. What's New in C# - C# Guide | Microsoft Docs [online], msdn.microsoft.com [dostęp 2017-11-22] (ang.).
  10. s,Visual Studio 2019 version 16.11 Release Notes [online], docs.microsoft.com [dostęp 2021-09-01] (ang.).
  11. BillWagner,Co nowego w języku C# 8.0 — przewodnik po języku C# [online], docs.microsoft.com [dostęp 2021-09-01] (pol.).
  12. Welcome to C# 9.0 [online], .NET Blog, 20 maja 2020 [dostęp 2021-08-30] (ang.).
  13. C# 9.0 w wersji preview już dostępny [online], bulldogjob.pl [dostęp 2021-08-30] (pol.).
  14. BillWagner,Co nowego w języku C# 10 — przewodnik po języku C# [online], docs.microsoft.com [dostęp 2022-04-17] (pol.).
  15. Nowości w .NET 6 i C# 10 [online], bulldogjob.pl [dostęp 2022-04-17] (pol.).
  16. C# 11 – sprawdź, co nowego! [online], JCommerce | Outsourcing usług IT, BI, EMM, Managed Services, 21 września 2022 [dostęp 2022-12-27] (pol.).
  17. C# 11 – przegląd nadchodzących nowości [online], bulldogjob.pl [dostęp 2022-12-27] (pol.).
  18. C# Language Design, .NET Platform, 27 grudnia 2022 [dostęp 2022-12-27] .
  19. https://bulldogjob.pl/readme/nowosci-w-jezyku-c-12-krok-naprzod-w-programowaniu-obiektowym
  20. Co nowego w języku C# 12 — Przewodnik języka C# - C# | Microsoft Learn [online], microsoft.com [dostęp 2024-04-22] (pol.).
  21. abBillWagner,What's new in C# 14 [online], learn.microsoft.com [dostęp 2026-02-05] (ang.).

Linki zewnętrzne

[edytuj |edytuj kod]
Języki programowania
1GL
2GL/
Język drugiej generacji/
Asembler
3GL /
Język trzeciej generacji
wieloparadygmatowe
proceduralne
istrukturalne
historyczne
inne
obiektowe
funkcyjne
edukacyjne
4GL/
Język czwartej generacji/
Język dziedzinowy
Języki zapytań do baz danych
Generatory raportów / stron
Przetwarzanie danych, analiza i raportowanie
5GL/Logiczne
Ezoteryczne
Inne
Platforma .NET
języki wspierane standardowo przezVS
inne języki i środowiska
alternatywne implementacje platformy
Kontrola autorytatywna (wieloparadygmatowy język programowania):
Źródło: „https://pl.wikipedia.org/w/index.php?title=C_Sharp&oldid=78996606
Kategoria:
Ukryte kategorie:

[8]ページ先頭

©2009-2026 Movatter.jp