1. Ogólna struktura projektu C#
Twój program to nie tylko jeden plik, ale cała kolekcja plików, folderów i ustawień. C# to język silnie typowany, więc przy większych aplikacjach ważne jest, żeby wszystko było poukładane. Jeśli zignorujesz strukturę projektu, twój kod szybko zamieni się w elektroniczny labirynt, w którym nie znajdziesz nawet własnego "Hello, World!".
Poza tym, znajomość struktury projektu to umiejętność, którą docenią na rozmowie o pracę. To jak wiedzieć, gdzie w domu są klucze i pilot do telewizora — życie jest wtedy dużo prostsze!
Dla jasności wyobraź sobie, że nasz projekt C# to pudełko z przegródkami:
MyFirstConsoleApp/
├── MyFirstConsoleApp.csproj
├── Program.cs
├── Properties/
│ └── launchSettings.json
├── bin/
│ └── ... (tu trafia skompilowany program)
├── obj/
│ └── ... (tu lądują tymczasowe pliki kompilacji)
Szczegóły struktury:
| Nazwa | Po co jest |
|---|---|
|
Plik projektu: „paszport” całego twojego programu, tu są wszystkie ustawienia projektu. |
|
Główny plik z punktem wejścia (Main). To tutaj zwykle piszesz swój pierwszy kod. |
|
Folder z ustawieniami projektu, np. sposoby uruchamiania z IDE. |
|
„Kosz na gotowe produkty” — tu trafia zbudowany (skompilowany) plik wykonywalny. |
|
Wewnętrzne robocze pliki kompilacji (jak brudnopis przy pisaniu powieści, rzadko tam zaglądasz). |
2. Plik projektu (.csproj)
Plik z rozszerzeniem .csproj to serce i mózg projektu. Właśnie tutaj zapisane są wszystkie globalne ustawienia: wersja języka, zależności, które pliki mają być kompilowane, jakie paczki są podłączone itd. Przełącz się w Solution Explorer na zakładkę Files.
Przykład pliku dla aplikacji konsolowej:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
</Project>
- <TargetFramework>net9.0</TargetFramework> — mówi, że projekt jest pod .NET 9.
- <OutputType>Exe</OutputType> — oznacza, że wyjdzie plik wykonywalny (.exe dla Windows).
- W bloku <PropertyGroup> trzymane są główne parametry.
- W tym pliku możesz dodawać dodatkowe paczki NuGet, zmieniać ustawienia kompilacji, włączać/wyłączać ficzery.
3. Główny plik programu: Program.cs
Jeśli porównać projekt do teatru, to Program.cs to scena, a reszta plików to kulisy. To tutaj znajduje się tzw. "punkt wejścia" aplikacji — metoda Main.
// Program.cs
using System;
namespace MyFirstConsoleApp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Cześć, świecie!");
}
}
}
- namespace — przestrzeń nazw, pomaga grupować klasy i unikać konfliktów nazw.
- class Program — główna klasa, gdzie jest metoda Main.
- static void Main(string[] args) — obowiązkowy punkt wejścia — stąd zaczyna się wykonywanie programu.
- Console.WriteLine() — już znany ci sposób na ogłoszenie światu swoich myśli.
Aktualizujemy naszą aplikację
Przypomnij sobie, że na poprzednich lekcjach robiliśmy mini-aplikację, która pytała o imię użytkownika i witała go. Oto przykład:
// Program.cs
using System;
namespace MyFirstConsoleApp
{
class Program
{
static void Main(string[] args)
{
Console.Write("Podaj swoje imię: ");
string name = Console.ReadLine();
Console.WriteLine($"Witaj, {name}! Żyj długo i szczęśliwie.");
}
}
}
Uruchom projekt: kliknij zielony przycisk ▶️ Run.
Jeśli wszystko poszło dobrze, na dole pojawi się zakładka Run. Zobaczysz, że program się uruchomił i czeka na twoją odpowiedź na pytanie Podaj swoje imię:. Wpisz dowolne imię (np. "Kot") prosto w tej konsoli i naciśnij Enter.
Zaraz po naciśnięciu Enter program przetworzy twój wpis i wyświetli końcową wiadomość z twoim imieniem. Program zakończył działanie i widzisz wynik.
4. Jak pisać swój kod: podstawowe zasady
Gdzie pisać kod?
Na początku najlepiej pisać główną logikę w pliku Program.cs w metodzie Main. Gdy aplikacja urośnie, będziesz tworzyć nowe pliki i klasy, ale póki co nie wyprzedzaj faktów — wszystko najciekawsze dzieje się właśnie tutaj.
Co można (a czego nie można) robić w Main?
- Można: deklarować zmienne, pisać obliczenia, wywoływać metody, wypisywać/odczytywać dane.
- Nie można: pisać kodu „poza” metodami lub klasami (np. po prostu linijki Console.WriteLine("Hello"); poza Main — tak nie wolno!).
Komentarze
Komentuj kod dla siebie i innych. Do komentarzy jednolinijkowych używaj //, do wielolinijkowych — /* ... */. Im łatwiej potem domyślić się, po co napisałeś ten tajemniczy kawałek kodu, tym lepiej.
// To jest komentarz jednolinijkowy
/*
A to —
komentarz wielolinijkowy.
*/
5. Jak przebiega wykonanie programu?
Twój program zawsze zaczyna się od metody Main. Wszystko, co jest przed tymi liniami, jest ignorowane. Chcesz coś zrobić przy starcie? Wrzuć to do Main.
Przykład — uproszczony schemat blokowy (kod → uruchomienie):
Początek programu
|
v
Metoda Main
|
v
Wykonywanie instrukcji w Main (po kolei)
|
v
Koniec programu
6. Jak twoja aplikacja rośnie: dodawanie nowych plików
Kiedy warto stworzyć nowy plik?
Kiedy twój kod przestaje się mieścić na jednym ekranie, a zmienne już nie mieszczą się w głowie, czas podzielić kod na części.
Przykład: jeśli robisz kalkulator, możesz zrobić osobny plik Calculator.cs i przenieść tam osobną klasę.
MyFirstConsoleApp/
├── Program.cs
├── Calculator.cs // Nowy plik z logiką kalkulatora
Jak dodać nowy plik w Rider
- W drzewku Solution Explorer kliknij prawym na projekt → "Add" → "New File" (albo "New Class").
- Podaj sensowną nazwę pliku.
- Napisz w pliku nową klasę lub funkcję.
// Calculator.cs
namespace MyFirstConsoleApp
{
class Calculator
{
public static int Add(int a, int b)
{
return a + b;
}
}
}
A teraz użyjemy jej w Program.cs:
// Program.cs
using System;
namespace MyFirstConsoleApp
{
class Program
{
static void Main(string[] args)
{
int sum = Calculator.Add(2, 3); //Używamy funkcji Add z klasy Calculator
Console.WriteLine($"2 + 3 = {sum}");
}
}
}
7. "Kompilacja" i "Uruchamianie" — co się dzieje pod maską?
Kiedy klikasz Run (albo F5), IDE:
- Sprawdza składnię i buduje twój kod do pliku binarnego (.exe lub .dll) w folderze bin/Debug/net9.0/ lub bin/Release/net9.0/.
- Uruchamia zbudowany plik.
- Wyświetla wynik w terminalu/konsoli, którą widzisz.
bin/ i obj/: po co są te foldery?
- bin/ — tu leży twój gotowy produkt (zbudowane programy).
- obj/ — tu są tymczasowe pliki potrzebne kompilatorowi do pośrednich obliczeń.
Zwykle możesz spokojnie ignorować te foldery, ich zawartość automatycznie się przebuduje w razie potrzeby.
8. Częste błędy przy pisaniu kodu i pracy z projektem
Pisanie kodu to nie jest bezmyślne stukanie w klawiaturę. Jak tylko pojawią się błędy typu CS5001: Program does not contain a static 'Main' method suitable for an entry point, programiści zaczynają masowo googlować, a IDE rzuca jeszcze trudniejszym językiem.
- Jeden z częstych błędów — kod poza metodą lub klasą. W C# nie możesz po prostu napisać wyrażenia w pliku programu. Wszystko musi być w klasie i metodzie!
- Różne nazwy plików i klas. Można tak, ale lepiej dawać plikom i klasom takie same, sensowne nazwy — dla własnej (i przyszłego kolegi) wygody.
- Pomyłki w przestrzeniach nazw. Jeśli stworzyłeś klasę w innej przestrzeni nazw (namespace), nie zapomnij jej podłączyć przez using.
- Zapomniałeś o punkcie wejścia. Jeśli usuniesz lub zmienisz nazwę metody Main, program się nie uruchomi.
GO TO FULL VERSION