C# Pierwszy Program
C# to nowoczesny, obiektowy język programowania, który jest łatwy do nauki i jednocześnie bardzo potężny. W tym poście pokażę, jak napisać swój pierwszy program w C#, wyjaśniając krok po kroku, co dzieje się w kodzie.
Prosty przykład
int sum = 10 + 50; // Instrukcja 1
System.Console.WriteLine(sum); // Instrukcja 2
Nasz program ma w tym momencie dwie instrukcje. Instrukcje w C# wykonywane są sekwencyjnie, a każda instrukcja zakończona jest średnikiem.
- Pierwsza instrukcja wylicza wyrażenie 10 + 50 i zapisuje wynik w zmiennej sum, której typem jest int (32-bitowa liczba całkowita).
- Druga instrukcja wywołuje metodę WriteLine z klasy Console, która należy do przestrzeni nazw System. Ta instrukcja wyświetla wynik na ekranie.
Co to jest Metoda
O metodach będzie mowa w dalszej części kursu. Teraz przedstawimy jedynie krótkie wprowadzenie do tematu.
Metoda wykonuje określone zadanie, natomiast klasa grupuje zarówno metody (funkcje), jak i dane, tworząc obiektowo zorientowany blok konstrukcyjny. Przykładem jest klasa Console
, która zawiera metody do obsługi wejścia i wyjścia wiersza poleceń, takie jak metoda WriteLine
. Klasa jest jednym z rodzajów typów, o których więcej dowiemy się w dalszej części kursu, gdy będziemy omawiać Typy.
Na najwyższym poziomie wszystkie typy są organizowane w przestrzenie nazw. Wiele często używanych typów, takich jak klasa Console, znajduje się w przestrzeni nazw System. Biblioteki .NET są zorganizowane w hierarchiczne, zagnieżdżone przestrzenie nazw. Na przykład przestrzeń nazw System.Text zawiera typy przeznaczone do pracy z tekstem, a System.IO obejmuje typy służące do operacji wejścia/wyjścia.
Używanie dyrektywy using
Każdorazowe kwalifikowanie klasy Console
pełną nazwą przestrzeni System
może wprowadzać niepotrzebny bałagan w kodzie. Dyrektywa using
pozwala tego uniknąć, umożliwiając zaimportowanie przestrzeni nazw. Dzięki temu można korzystać z elementów danej przestrzeni nazw bez konieczności ciągłego jej wskazywania.
using System; // Import przestrzeni nazw System
int sum = 10 + 50; // Instrukcja 1
Console.WriteLine(sum); // Instrukcja 2
Teraz możemy skompilować i uruchomić naszą aplikację.
Refaktoryzacja kodu za pomocą metody wielokrotnego użytku
Podstawowym sposobem ponownego wykorzystania kodu jest tworzenie funkcji wyższego poziomu, które wywołują funkcje niższego poziomu. Możemy zrefaktoryzować nasz program, wprowadzając metodę wielokrotnego użytku o nazwie CalculateSum. Metoda ta dodaje dwie liczby całkowite.
using System; // Importowanie przestrzeni nazw System
// Wywołanie metody CalculateSum z różnymi argumentami
Console.WriteLine(CalculateSum(10, 50));
Console.WriteLine(CalculateSum(1000, 7000));
// Definicja metody CalculateSum
int CalculateSum(int number1, int number2)
{
int sum = number1 + number2; // Obliczanie sumy
return sum; // Zwracanie wyniku
}
Teraz możemy skompilować i uruchomić naszą aplikację.
W powyższym kodzie:
- Metoda CalculateSum przyjmuje dwie liczby jako parametry i zwraca ich sumę.
- Literały 10, 50, 1000 i 7000 to argumenty przekazywane do metody.
Nasza metoda składa się z serii instrukcji (w tym przypadku dwóch) otoczonych parą nawiasów klamrowych. Taki zestaw nazywany jest blokiem instrukcji. Metoda może przyjmować dane wejściowe od wywołującego, definiując parametry, oraz zwracać dane wyjściowe, określając typ zwracany. W przypadku metody CalculateSum przyjmuje ona dwa parametry (number1
i number2
), które reprezentują liczby całkowite do dodania, oraz zwraca wynik obliczeń do wywołującego.
Literały 10
, 50
, 1000
i 7000
to argumenty, które przekazujemy do metody CalculateSum. Jeśli metoda nie przyjmuje danych wejściowych, należy użyć pustych nawiasów ()
. Z kolei, jeśli metoda nie zwraca żadnych danych, używamy słowa kluczowego void.
Dodajmy teraz metodę bez parametrów i zwracania, aby zaprezentować klasyczne “Hello, World!”:
Dodanie metody bez zwracania wartości
Metoda może również niczego nie zwracać. W takim przypadku używamy słowa kluczowego void
.
SayHello();
void SayHello()
{
Console.WriteLine ("Hello, world");
}
Teraz możemy skompilować i uruchomić naszą aplikację.
Metody to jeden z kilku rodzajów funkcji dostępnych w C#. W naszym przykładzie skorzystaliśmy również z innego rodzaju funkcji — operatora +
, który wykonuje operację dodawania. Oprócz metod i operatorów w języku C# występują także inne funkcje, takie jak konstruktory, właściwości, zdarzenia, indeksatory, finalizatory i wiele innych.
Kompilacja i uruchamianie programu
Kompilator C# przekształca kod źródłowy (zestaw plików z rozszerzeniem .cs) w zestaw (assembly). Assembly to jednostka pakowania i wdrażania w .NET. Może to być aplikacja lub biblioteka. Aplikacja konsolowa lub aplikacja Windows posiada punkt wejścia, podczas gdy biblioteka go nie ma. Biblioteki służą do wywoływania przez aplikacje lub inne biblioteki. .NET sam w sobie jest zestawem bibliotek oraz środowiskiem wykonawczym.
Wszystko, co dotychczas robiliśmy, zaczęło się od serii instrukcji, zwanych instrukcjami najwyższego poziomu. Obecność tych instrukcji automatycznie tworzy punkt wejścia dla aplikacji konsolowej lub Windows. Bez instrukcji najwyższego poziomu punktem wejścia aplikacji jest metoda Main
.
Narzędzie dotnet
(dotnet.exe w systemie Windows) służy do zarządzania kodem źródłowym i plikami binarnymi .NET z poziomu wiersza poleceń. Może być wykorzystywane zarówno do budowania, jak i uruchamiania aplikacji, stanowiąc alternatywę dla zintegrowanego środowiska programistycznego (IDE), takiego jak Visual Studio czy Visual Studio Code.
Aby zainstalować narzędzie dotnet
, należy zainstalować .NET 8 SDK lub Visual Studio. Jego domyślna lokalizacja to %ProgramFiles%\dotnet
w systemie Windows lub /usr/bin/dotnet
w systemie Linux.
Do skompilowania aplikacji, narzędzie dotnet
wymaga pliku projektu oraz jednego lub więcej plików C#. Poniższe polecenie tworzy nowy projekt konsolowy, generując jego podstawową strukturę.
dotnet new console -n MyProgram
To polecenie tworzy folder o nazwie MyProgram, który zawiera plik projektu o nazwie MyProgram.csproj oraz plik C# o nazwie Program.cs, w którym domyślnie wyświetlane jest “Hello World”.
Aby zbudować i uruchomić program, przejdź do folderu MyProgram i uruchom polecenie.
dotnet run
Jeśli chcesz jedynie skompilować aplikację bez jej uruchamiania, użyj polecenia.
dotnet build
Skopiowane pliki wynikowe zostaną zapisane w podkatalogu bin\debug
utworzonego projektu.
Narzędzie dotnet
pozwala zarządzać kodem i kompilować programy. Możesz je pobrać jako część .NET SDK. Aby stworzyć i uruchomić aplikację konsolową:
- Utwórz nowy projekt:
dotnet new console -n MyProgram
- Przejdź do folderu projektu:
cd MyProgram
- Uruchom program:
dotnet run
Więcej informacji znajdziesz w przewodniku po .NET CLI.
Składnia języka C#
Składnia języka C# jest inspirowana składnią języków C i C++.
Identyfikatory i słowa kluczowe
Identyfikatory to nazwy, które programiści wybierają dla swoich klas, metod, zmiennych itp. W naszym przykładowym programie występują następujące identyfikatory, w kolejności ich pojawiania się.
sum System Console WriteLine
Identyfikator musi być pojedynczym słowem, składającym się z znaków Unicode, zaczynających się od litery lub podkreślenia. Identyfikatory w C# rozróżniają wielkość liter. Zgodnie z konwencją, parametry, zmienne lokalne i pola prywatne powinny być zapisywane w konwencji Camel case (np. myVariable
), podczas gdy inne identyfikatory, takie jak nazwy metod, klasy czy właściwości, powinny być zapisywane w konwencji Pascal case (np. MyMethod
).
Słowa kluczowe
Słowa kluczowe to nazwy, które mają dla kompilatora specjalne znaczenie. W naszym przykładowym programie występują dwa słowa kluczowe.
using int
Większość słów kluczowych jest zarezerwowana, co oznacza, że nie można ich używać jako identyfikatorów.
Jeśli naprawdę chcesz użyć identyfikatora, który koliduje z zarezerwowanym słowem kluczowym, możesz to zrobić, kwalifikując go prefiksem @12test
int event = 123; // Niedozwolone
int @event = 123; // Dozwolone
Symbol @
nie jest częścią samego identyfikatora, co oznacza, że @event
jest traktowane tak samo jak event
.
Identyfikatory to nazwy zmiennych, metod, klas itp. Powinny zaczynać się od litery lub znaku _
.
C# rozróżnia wielkość liter. Dla czytelności stosuje się konwencje:
- CamelCase dla zmiennych lokalnych i parametrów (
myVariable
) - PascalCase dla metod i klas (
MyMethod
)
Pełną listę słów kluczowych znajdziesz w dokumentacji Microsoft.
Słowa kluczowe kontekstowe
Niektóre słowa kluczowe w C# są kontekstowe, co oznacza, że można ich używać jako identyfikatorów bez potrzeby stosowania symbolu @
. Takie słowa kluczowe są zarezerwowane tylko w określonych kontekstach i nie powodują niejednoznaczności, gdy są używane w innych.
Pełną listę kontekstowych słów kluczowych można znaleźć na stronie dokumentacji Microsoft.
W przypadku kontekstowych słów kluczowych, niejednoznaczność nie może wystąpić w kontekście, w którym są używane.
Literały, znaki interpunkcyjne i operatory
Literały
Literały to podstawowe fragmenty danych, które są bezpośrednio osadzone w programie. W naszym przykładowym programie użyliśmy literłów 10
i 50
.
Znaki interpunkcyjne
Znaki interpunkcyjne pomagają w rozgraniczeniu struktury programu. Przykładem jest średnik (;
), który kończy instrukcję. Instrukcje mogą obejmować więcej niż jeden wiersz, jak w przypadku poniżej.
Console.
WriteLine
(1 + 2 + 3 + 4 + 5 + 6);
Operator
Operator przekształca i łączy wyrażenia. Większość operatorów w C# jest reprezentowana przez symbole, takie jak operator dodawania +
. Operatory omówię bardziej szczegółowo w dalszej części kursu. Oto operatory, których użyliśmy w naszym przykładowym programie.
=
(operator przypisania)+
(operator dodawania).
(operator dostępu do członków obiektu)()
(nawiasy, używane do wywoływania metod lub przekazywania argumentów)
Znak równości wykonuje przypisanie. Podwójny znak równości, ==, wykonuje porównanie równości, zobaczysz to później. Znak plusa jak się pewnie domyślasz z lekcji matematyki to dodawanie. Kropka oznacza członka czegoś. Nawiasy są używane podczas deklarowania lub wywoływania metody, puste nawiasy są używane, gdy metoda nie przyjmuje żadnych argumentów. Nawiasy mają również inne cele, które zobaczysz później w tym kursie.
Komentarze
C# oferuje dwa różne style dokumentowania kodu źródłowego: komentarze jednowierszowe i komentarze wielowierszowe.
Komentarz jednowierszowy zaczyna się od podwójnego ukośnika (//
) i trwa do końca wiersza.
int x = 3; // Komentarz dotyczący przypisania 3 do x
Komentarz wielowierszowy zaczyna się od /* i kończy na */;
int x = 3; /* To jest komentarz, który
rozciąga się na dwa wiersze */
Komentarze mogą również zawierać znaczniki dokumentacji XML, które omówię w rozdziale o „Dokumentacji XML”.
Podstawy typów
Typ definiuje strukturę wartości, które mogą być przechowywane w zmiennej. W naszym przykładzie używamy dwóch literałów typu int
o wartościach 10 i 50. Deklarujemy również zmienną typu int o nazwie sum.
Zmienna oznacza miejsce w pamięci, które może przechowywać różne wartości w trakcie działania programu.
Natomiast stała zawsze reprezentuje tę samą wartość przez cały czas.
int x = 50; // Zmienna
const int y = 100; // Stała
int sum = x + y;
Console.WriteLine(sum);
Wszystkie wartości w C# są wystąpieniami typu. Znaczenie wartości oraz zbiór możliwych wartości, jakie może przyjąć zmienna, są określane przez jej typ.
Typ int to wstępnie zdefiniowany typ służący do reprezentowania liczb całkowitych w zakresie od −2,147,483,648 do 2,147,483,647, mieszczących się w 32 bitach pamięci. int jest także domyślnym typem dla literałów liczbowych w tym zakresie. Można wykonywać operacje arytmetyczne na zmiennych typu int, co już miało miejsce w naszym przykładzie.
To wszystko na dzisiaj! zapraszam na następne lekcje!
Jesli wolisz video
Jeśli nie możesz się doczekać kolejnych postów z serii “C# od podstaw”, zapraszam Cię do mojego kursu: C# – Podstawy programowania. 🚀 To świetna okazja, by pogłębić swoją wiedzę i szybko zacząć programować!