C# (wymawiane "si szarp") to język programowania ogólnego przeznaczenia zaprojektowany w Microsofcie przez zespół kierowany przez Andersa Hejlsberga i wydany po raz pierwszy w 2002 roku. Jest statycznie typowany (każda zmienna ma typ, który kompilator sprawdza przed uruchomieniem programu), obiektowy (kod jest zorganizowany w klasy) i zarządzany (odśmiecacz zwalnia pamięć za ciebie). Współczesny C# sporo czerpie też z programowania funkcyjnego: lambdy, zapytania LINQ, dopasowywanie wzorców i niemutowalne rekordy.
Oto kompletny program w C#. Kliknij Uruchom:
Wynik:
Hello, Ada! It is 2026.
Do czego służy C#
C# to język ogólnego przeznaczenia, więc spotyka się go w większości rodzajów oprogramowania, ale kilka obszarów stanowi jego największą część:
- Gry. Unity, jeden z najpopularniejszych silników gier, używa C# jako języka skryptowego. Obsługuje go też Godot.
- Backendy webowe. ASP.NET Core to framework webowy .NET do API, stron i aplikacji czasu rzeczywistego. W publicznych benchmarkach należy do najszybszych popularnych frameworków webowych.
- Aplikacje desktopowe. WPF i Windows Forms w Windows, .NET MAUI i Avalonia na wielu platformach.
- Chmura i usługi. Azure Functions, procesy działające w tle, mikrousługi w kontenerach.
- Narzędzia i automatyzacja. Narzędzia wiersza poleceń, skrypty budowania, przetwarzanie danych.
Jest szczególnie popularny w dużych firmach opartych na technologiach Microsoftu i w studiach gier. Aplikacje mobilne da się pisać w .NET MAUI (następcy Xamarina), ale to mniejsza nisza niż Kotlin czy Swift.
C# i .NET to nie to samo
C# to język. .NET to platforma, która go uruchamia, i składa się z trzech części:
- Środowisko uruchomieniowe (CLR). Kompilator C# nie tworzy kodu maszynowego. Tworzy język pośredni (IL), zapisywany w plikach
.dlllub.exe. Gdy program działa, Common Language Runtime kompiluje ten IL do kodu natywnego w locie (JIT), zarządza pamięcią przez odśmiecacz i pilnuje bezpieczeństwa typów. - Biblioteka klas bazowych. Kolekcje, dostęp do plików, sieć, tekst, daty, wątki: wszystko pod
System.*. - SDK. Polecenie
dotnet, które tworzy, buduje, testuje i uruchamia projekty.
Do tego samego IL kompilują się inne języki (F#, Visual Basic), dlatego program w C# może korzystać z biblioteki napisanej w F#.
Platforma ma dwie generacje. .NET Framework (od 1.0 w 2002 do 4.8.1) działa tylko w Windows i nadal uruchamia wiele starszych aplikacji. .NET (do wersji 5 nazywany .NET Core) to otwartoźródłowy, wieloplatformowy następca, który działa w Windows, Linuksie i macOS. Nowe projekty celują w .NET; wydania o parzystych numerach, takie jak .NET 8 i .NET 10, dostają trzy lata wsparcia długoterminowego.
Jak zbudowany jest program w C#
Program w C# składa się z typów (klas, struktur, interfejsów, enumów, rekordów), które zawierają składniki (pola, właściwości, metody). Wykonanie zaczyna się w statycznej metodzie o nazwie Main. Przestrzenie nazw grupują powiązane typy, a dyrektywy using pozwalają odwoływać się do nich krótkimi nazwami.
Wynik:
Maya: 21.00
Leo: 13.00
Kilka rzeczy już widać: Order to klasa z dwiema właściwościami (Customer, Total), konstruktorem i metodą. decimal to typ do kwot pieniężnych, a przyrostek m oznacza literał dziesiętny. var pozwala kompilatorowi wywnioskować typ zmiennej lokalnej, a List<Order> to generyczna kolekcja, która przyjmuje tylko obiekty Order. {order.Total:F2} wewnątrz $"..." formatuje liczbę z dwoma miejscami po przecinku.
W prawdziwym projekcie każda klasa zwykle ma własny plik, a pliki są kompilowane razem do jednego zestawu (assembly). Szczegóły znajdziesz na stronie klasy i obiekty.
Statyczne typowanie w praktyce
Kompilator zna typ każdego wyrażenia, więc duża klasa błędów nigdy nie trafia do działającego programu. Przypisanie stringa do int, wywołanie nieistniejącej metody albo przekazanie argumentów w złej kolejności kończy się niepowodzeniem w czasie kompilacji, z błędem wskazującym linię.
Wynik:
29.97
45
Typy napędzają też edytor: autouzupełnianie, zmiana nazw i "znajdź wszystkie odwołania" są w C# dokładne, bo narzędzia czytają te same informacje o typach co kompilator.
Wersje C# i co dodały
Od C# 9 w 2020 roku nowa wersja ukazuje się każdego listopada razem z nowym wydaniem .NET; wcześniej wersje pojawiały się co dwa, trzy lata. Każda wersja jest projektowana tak, żeby istniejący kod nadal się kompilował, a rzadkie wyjątki (jak field, które w C# 14 stało się słowem kluczowym wewnątrz akcesorów właściwości) są dokumentowane jako zmiany niekompatybilne, więc program napisany dla C# 2 prawie zawsze kompiluje się dziś bez zmian.
| Wersja | Rok | Najważniejsze nowości |
|---|---|---|
| C# 2 | 2005 | Typy generyczne, typy wartościowe dopuszczające null (int?), iteratory (yield) |
| C# 3 | 2007 | LINQ, wyrażenia lambda, var, inicjalizatory obiektów, metody rozszerzające |
| C# 4 | 2010 | dynamic, parametry opcjonalne i nazwane |
| C# 5 | 2012 | async i await |
| C# 6 | 2015 | Interpolacja stringów $"...", nameof, operator warunkowy null ?. |
| C# 7 | 2017 | Krotki, out var, dopasowywanie wzorców z is, separatory cyfr |
| C# 8 | 2019 | Typy referencyjne dopuszczające null, wyrażenia switch, zakresy s[1..4], ??=, strumienie asynchroniczne |
| C# 9 | 2020 | Rekordy, akcesory init, instrukcje najwyższego poziomu, new() z typem docelowym |
| C# 10 | 2021 | Globalne dyrektywy using, przestrzenie nazw o zakresie pliku, struktury rekordowe |
| C# 11 | 2022 | Surowe literały stringów """, składniki required, wzorce list |
| C# 12 | 2023 | Konstruktory podstawowe dla klas, wyrażenia kolekcji [1, 2, 3] |
| C# 13 | 2024 | Kolekcje params, typ System.Threading.Lock |
| C# 14 | 2025 | Składniki rozszerzające, słowo kluczowe field we właściwościach |
Nowsze wersje głównie usuwają zbędny ceremoniał. Ten program dla C# 9 i nowszych używa instrukcji najwyższego poziomu (bez class Program, bez Main), rekordu i wyrażenia switch:
// C# 9 and later, in a .NET 6+ project (implicit usings import System)
var order = new Order("Maya", 21.00m);
Console.WriteLine(Shipping(order));
static string Shipping(Order o) => o.Total switch
{
>= 50m => "free shipping",
>= 20m => "standard shipping",
_ => "shipping fee applies"
};
record Order(string Customer, decimal Total);
Ta sama logika w starszym, jawnym stylu, który kompiluje się w C# 6 i każdej późniejszej wersji:
Wynik:
standard shipping
Obie formy to poprawny C#. Starszy, jawny styl spotkasz w istniejącym kodzie, tutorialach i projektach Unity, a krótszy w nowych projektach .NET.
LINQ: zapytania o dane wbudowane w język
LINQ (Language Integrated Query, C# 3) to jedna z funkcji, które ludzie wymieniają, tłumacząc, dlaczego lubią C#. Pozwala filtrować, sortować, grupować i przekształcać dowolną kolekcję łańcuchem metod:
Wynik:
95, 91, 88, 72
Average: 78.0
Best: 95
Ta sama składnia działa na listach w pamięci, na tabelach bazy danych przez Entity Framework i na XML. Więcej na stronie o LINQ.
Czy C# to dobry pierwszy język?
C# wymaga na starcie więcej niż Python: deklarujesz typy, kończysz instrukcje średnikami i umieszczasz kod w klasach. W zamian kompilator wcześnie wyłapuje błędy, narzędzia (Visual Studio, VS Code, Rider) są świetne, a pojęcia przenoszą się wprost do Javy, TypeScriptu, Kotlina i C++. Jeśli chcesz tworzyć gry w Unity albo pracować w firmie opartej na .NET, to oczywisty wybór. Jeśli twoim celem jest analiza danych albo uczenie maszynowe, Python ma większy ekosystem.
Na początek zainstaluj .NET SDK i uruchom dotnet new console albo zacznij od Hello World i uruchamiaj przykłady bezpośrednio na tych stronach.
Najczęściej zadawane pytania
Czym jest C#?
C# (wymawiane "si szarp") to statycznie typowany, obiektowy język programowania ogólnego przeznaczenia, stworzony w Microsofcie i wydany po raz pierwszy w 2002 roku. Jego kod źródłowy kompiluje się do języka pośredniego, który środowisko uruchomieniowe .NET zamienia na kod maszynowy, a pamięcią zarządza odśmiecacz. Używa się go do backendów webowych, gier w Unity, aplikacji desktopowych, usług chmurowych i narzędzi.
Czy C# to to samo co .NET?
Nie. C# to język; .NET to platforma, na której działa: środowisko uruchomieniowe (CLR), biblioteka klas bazowych (System.Collections.Generic, System.IO i tak dalej) oraz narzędzia SDK. Na .NET działają też F# i Visual Basic, a wersja C# zwykle ukazuje się razem z wersją .NET (na przykład C# 12 z .NET 8).
Do czego służy C#?
Do web API i stron w ASP.NET Core, gier w Unity (jego językiem skryptowym jest C#), aplikacji desktopowych dla Windows w WPF i WinForms, aplikacji wieloplatformowych w .NET MAUI, usług chmurowych i Azure Functions oraz narzędzi wiersza poleceń. Jest popularny w oprogramowaniu dla przedsiębiorstw i w studiach gier.
Czy C# jest trudny do nauki?
Jako pierwszy język jest średnio trudny. Składnia jest w stylu C i bardziej rygorystyczna niż w Pythonie, bo każda zmienna ma typ sprawdzany przez kompilator, ale pamięcią zarządza się za ciebie, a komunikaty o błędach są jasne. Większość początkujących po kilku tygodniach praktyki potrafi pisać przydatne programy konsolowe.
Czy nadal warto uczyć się C#?
Tak. C# regularnie należy do najczęściej używanych języków w ankietach programistów, .NET jest otwartoźródłowy i wieloplatformowy, a język dostaje nową wersję każdego listopada. To praktyczny wybór, jeśli chcesz tworzyć gry w Unity albo pracować w firmach opartych na technologiach Microsoftu.