CodeGym /Kursy /C# SELF /Zanurzamy się w projekt C#

Zanurzamy się w projekt C#

C# SELF
Poziom 5 , Lekcja 4
Dostępny

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
MyFirstConsoleApp.csproj
Plik projektu: „paszport” całego twojego programu, tu są wszystkie ustawienia projektu.
Program.cs
Główny plik z punktem wejścia (Main). To tutaj zwykle piszesz swój pierwszy kod.
Properties/
Folder z ustawieniami projektu, np. sposoby uruchamiania z IDE.
bin/
„Kosz na gotowe produkty” — tu trafia zbudowany (skompilowany) plik wykonywalny.
obj/
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!");
        }
    }
}
Minimalny przykład Program.cs
  • 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

  1. W drzewku Solution Explorer kliknij prawym na projekt → "Add" → "New File" (albo "New Class").
  2. Podaj sensowną nazwę pliku.
  3. 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.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION