Wprowadzenie do C#
C# to język programowania opracowany przez firmę Microsoft, używany głównie do tworzenia aplikacji na platformę .NET. Jego główne cechy to:
- Obiektowość: programowanie oparte na klasach i obiektach
- Silnie typowany: zmienne mają określone typy, co pomaga unikać błędów
- Czytelność: składnia języka jest zbliżona do innych popularnych języków, np. Java czy C++
- Zarządzanie pamięcią: automatyczne dzięki Garbage Collector
- Wieloplatformowość: działa na Windows, Linux, macOS dzięki .NET Core/.NET 5+
Historia i wersje C#
- 2000: C# 1.0 – pierwsza wersja
- 2024: C# 12 – najnowsza wersja z nowoczesnymi funkcjami
- Twórca: Anders Hejlsberg (również twórca TypeScript)
Gdzie używamy C#?
- Aplikacje desktopowe (WPF, WinUI)
- Aplikacje webowe (ASP.NET)
- Aplikacje mobilne (Xamarin, .NET MAUI)
- Gry (Unity)
- Usługi w chmurze (Azure)
Instrukcje i przepływ wykonania
Instrukcje to pojedyncze polecenia, które mówią programowi, co ma zrobić. Każda instrukcja w C# zwykle kończy się średnikiem (;).
Rodzaje instrukcji:
- Deklaracja i inicjalizacja zmiennej
- Przypisanie wartości do zmiennej
- Wywołanie metody (np.
Console.WriteLine("Tekst");) - Instrukcje warunkowe (np.
if,else) - Instrukcje pętli (np.
for,while) - Instrukcje skoku (
return,break,continue)
Przepływ wykonania
Przepływ wykonania to kolejność, w jakiej instrukcje są wykonywane przez program. Domyślnie w C# instrukcje wykonywane są sekwencyjnie – od góry do dołu, ale możemy sterować przepływem za pomocą instrukcji warunkowych i pętli.
using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Zaczynamy program..."); // 1. Instrukcja
int liczba = 10; // 2. Instrukcja: deklaracja i przypisanie
liczba = liczba + 5; // 3. Instrukcja: zmiana wartości zmiennej
Console.WriteLine("Wartość liczby: " + liczba); // 4. Instrukcja: wyświetlenie
// Przykład prostego sterowania przepływem
if (liczba > 10) // 5. Instrukcja warunkowa
{
Console.WriteLine("Liczba jest większa od 10"); // 6. Instrukcja warunkowa
}
}
}Bloki kodu
Bloki kodu to grupy instrukcji otoczone nawiasami klamrowymi {}. Określają one zasięg zmiennych i grupują powiązane instrukcje.
{
// To jest blok kodu
int lokalnaZmienna = 5;
Console.WriteLine(lokalnaZmienna);
} // lokalnaZmienna przestaje istnieć tutajIdentyfikatory i zasady nazewnictwa
Identyfikatory to nazwy, które nadajemy zmiennym, metodom, klasom, itp. w kodzie.
Zasady techniczne (obowiązkowe):
- Mogą zawierać litery, cyfry i znak podkreślenia
_ - Nie mogą zaczynać się od cyfry
- Nie mogą być słowami kluczowymi
- Wielkość liter ma znaczenie (
nazwa≠Nazwa)
Identyfikatory – podstawowe zasady
Identyfikatory to nazwy, które nadajemy zmiennym, metodom, klasom, itp. w kodzie.
Zasady techniczne (obowiązkowe):
- Mogą zawierać litery, cyfry i znak podkreślenia
_ - Nie mogą zaczynać się od cyfry
- Nie mogą być słowami kluczowymi
- Wielkość liter ma znaczenie (
nazwa≠Nazwa)
Przykłady prawidłowych i nieprawidłowych nazw:
// ✅ Prawidłowe nazwy
string imieUzytkownika;
int liczba1;
bool _czyWlaczony;
// ❌ Nieprawidłowe nazwy
// int 123liczba; // Zaczyna się od cyfry
// string class; // Słowo kluczowe
// bool ma-wiek; // Zawiera myślnikUwaga: Szczegółowe konwencje nazewnictwa omówimy w osobnej lekcji poświęconej wyłącznie tym zagadnieniom.
Deklaracja i inicjalizacja zmiennych
Podstawy pracy ze zmiennymi:
Deklaracja – poinformowanie kompilatora o typie i nazwie zmiennej:
int liczba; // Zmienna zadeklarowana, ale nieinicjalizowanaInicjalizacja – nadanie wartości zmiennej:
int liczba = 10; // Deklaracja + inicjalizacja w jednej liniiPrzypisanie – zmiana wartości istniejącej zmiennej:
liczba = 5; // Nowa wartość dla istniejącej zmiennejRóżne sposoby deklaracji:
using System;
class Program
{
static void Main(string[] args)
{
// 1. Klasyczna deklaracja z inicjalizacją
int wiek = 20;
// 2. Deklaracja, potem przypisanie
string imie;
imie = "Anna";
// 3. Wnioskowanie typu z 'var'
var miasto = "Warszawa"; // Kompilator wywnioskuje: string
var temperatura = 25.5; // Kompilator wywnioskuje: double
// 4. Deklaracja wielu zmiennych tego samego typu
int x = 10, y = 20, z = 30;
// 5. Stałe - wartości niezmiennych
const double PI = 3.14159;
const string NAZWA_APLIKACJI = "Moja Aplikacja";
// 6. Wartości domyślne
int nieustawionaLiczba = default(int); // 0
string nieustawionyTekst = default(string); // null
// Wyświetlenie wartości
Console.WriteLine($"Imię: {imie}");
Console.WriteLine($"Wiek: {wiek}");
Console.WriteLine($"Miasto: {miasto}");
Console.WriteLine($"Temperatura: {temperatura}°C");
Console.WriteLine($"Współrzędne: x={x}, y={y}, z={z}");
Console.WriteLine($"PI = {PI}");
}
}Zasięg zmiennych (Scope):
class Program
{
static int zmiennaKlasowa = 100; // Dostępna w całej klasie
static void Main(string[] args)
{
int zmiennaMetody = 50; // Dostępna w całej metodzie Main
if (true)
{
int zmiennaBloku = 25; // Dostępna tylko w tym bloku
Console.WriteLine(zmiennaKlasowa); // ✅ Dostępna
Console.WriteLine(zmiennaMetody); // ✅ Dostępna
Console.WriteLine(zmiennaBloku); // ✅ Dostępna
}
// Console.WriteLine(zmiennaBloku); // ❌ Błąd! Poza zasięgiem
}
}Komentarze
Komentarze służą do wyjaśniania kodu lub tymczasowego wyłączania fragmentów. Kompilator je ignoruje.
Rodzaje komentarzy:
1. Komentarz jednolinijkowy (//)
// To jest komentarz jednolinijkowy
int liczba = 10; // Komentarz na końcu linii2. Komentarz wielolinijkowy (/* */)
/*
To jest komentarz
wielolinijkowy - może
zajmować wiele linii
*/
int wynik = a + b; /* również w środku linii */3. Komentarze dokumentacyjne (///)
/// <summary>
/// Oblicza sumę dwóch liczb całkowitych
/// </summary>
/// <param name="a">Pierwsza liczba</param>
/// <param name="b">Druga liczba</param>
/// <returns>Suma liczb a i b</returns>
public int Dodaj(int a, int b)
{
return a + b;
}Dobre praktyki komentowania:
// ✅ Dobry komentarz - wyjaśnia DLACZEGO, nie CO
// Używamy algorytmu QuickSort ze względu na dużą ilość danych
Array.Sort(duzeZbior);
// ❌ Zły komentarz - opisuje oczywiste
// Przypisuje wartość 5 do zmiennej liczba
int liczba = 5;
// ✅ Dobry komentarz - ostrzeżenie lub ważna informacja
// UWAGA: Ta metoda modyfikuje oryginalną tablicę!
public void PosortujTablice(int[] tablica)
// ✅ Dobry komentarz - TODO dla przyszłych zmian
// TODO: Dodać walidację danych wejściowych
public void PrzetworzDane(string dane)Pełna lista słów kluczowych C#:
abstract, as, base, bool, break, byte, case, catch, char, checked,
class, const, continue, decimal, default, delegate, do, double, else,
enum, event, explicit, extern, false, finally, fixed, float, for,
foreach, goto, if, implicit, in, int, interface, internal, is, lock,
long, namespace, new, null, object, operator, out, override, params,
private, protected, public, readonly, ref, return, sbyte, sealed,
short, sizeof, stackalloc, static, string, struct, switch, this,
throw, true, try, typeof, uint, ulong, unchecked, unsafe, ushort,
using, virtual, void, volatile, whileĆwiczenia praktyczne
Ćwiczenie 1: Zmienne i komentarze ✨
Utwórz nowy projekt konsolowy i napisz program, który:
- Zadeklaruj zmienną typu
stringo nazwieimiei przypisz do niej swoje imię - Zadeklaruj zmienną typu
into nazwiewieki przypisz do niej swój wiek - Zadeklaruj zmienną typu
stringo nazwiemiastoi przypisz swoją miejscowość - Wypisz wszystkie wartości w konsoli używając interpolacji stringów
- Dodaj odpowiednie komentarze
Ćwiczenie 2: Kalkulator prostych operacji 🧮
Napisz program, który:
- Deklaruje dwie zmienne liczbowe
- Wykonuje podstawowe operacje matematyczne
- Wyświetla wyniki z opisami