C# Academy · Lekcja

public/internal/protected/private (z uwagą o file)

Poznaj wpływ public, internal, protected i private na widoczność oraz reguły dziedziczenia i tej samej biblioteki. Uwaga: dostęp na poziomie pliku nie występuje w C# 6.

Lekcja 1 z 38 kroki

public/internal/protected/private (z uwagą o file) to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 1 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 3 lekcji w sumie.

Przegląd modyfikatorów dostępu

Cel: Wybierz odpowiednią widoczność.

  • public: wszędzie
  • internal: w tym samym assembly
  • protected: klasy pochodne
  • private: ta sama klasa
  • file: nowszy niż C# 6 (tylko informacja)

private a public

Pola powinny być private, a udostępniać należy sprawdzone elementy public.

using System;

// private: only inside the class; public: everywhere the class is visible
public class Box
{
  private int _width;             // hidden storage
  public int Width                // controlled access
  {
    get { return _width; }
    set { _width = value < 0 ? 0 : value; } // simple guard
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Box b = new Box();
    // b._width = -5; // INVALID: private (kept as comment)
    b.Width = 10;      // OK: public property
    Console.WriteLine("Width = " + b.Width);
  }
}

protected w dziedziczeniu

protected służy do dziedziczenia: typy pochodne mogą z niego korzystać, a kod zewnętrzny nie.

using System;

public class BaseCounter
{
  protected int Count; // derived classes can see this
  public int Value() { return Count; }
}

public class StepCounter : BaseCounter
{
  public void Step() { Count = Count + 1; } // allowed: protected
}

public class Program
{
  public static void Main(string[] args)
  {
    StepCounter sc = new StepCounter();
    sc.Step();
    // sc.Count = 5; // INVALID from outside (commented)
    Console.WriteLine("Value = " + sc.Value());
  }
}

Dostęp internal

internal ogranicza widoczność do bieżącego assembly (kompilacji biblioteki lub aplikacji).

using System;

// internal type: visible only inside this assembly
internal class InternalHelper
{
  public static string Ping() { return "pong"; }
}

// public type can use internal from the same assembly
public class UsesInternal
{
  public string Call() { return InternalHelper.Ping(); }
}

public class Program
{
  public static void Main(string[] args)
  {
    UsesInternal u = new UsesInternal();
    Console.WriteLine(u.Call());
  }
}

protected internal

protected internal oznacza, że element jest dostępny dla typów pochodnych lub z dowolnego miejsca w tym samym assembly.

using System;

public class LibraryBase
{
  // Accessible to derived types OR anywhere in the same assembly
  protected internal void Touch() { Console.WriteLine("touched"); }
}

public class LibChild : LibraryBase
{
  public void Use() { Touch(); } // via inheritance
}

public class Program
{
  public static void Main(string[] args)
  {
    LibChild c = new LibChild();
    c.Use();

    LibraryBase b = new LibraryBase();
    b.Touch(); // same assembly, allowed
  }
}

Uwaga dotycząca modyfikatora file i wskazówki

Uwaga: Modyfikator dostępu file pojawił się w nowszych wersjach języka C# (nie występuje w C# 6). W C# 6 należy stosować modyfikatory public, internal, protected, private i protected internal.

  • Domyślnie wybieraj private
  • Używaj public wyłącznie w publicznym interfejsie API
  • Używaj internal, aby ukrywać implementację przed innymi assembly
  • Używaj protected do współpracy klasy bazowej z klasami pochodnymi

Znaczenie internal

Szybkie sprawdzenie: Co oznacza modyfikator dostępu internal w języku C#?

Podsumowanie

Podsumowanie: Wybieraj najmniejszy potrzebny poziom widoczności: private → protected/internal → public. C# 6 nie zawiera nowszego modyfikatora file; do ukrywania na poziomie assembly używaj internal.

Bezpłatny start

Ucz się C# dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
93
Lekcje
346

Często zadawane pytania

Czy lekcja „public/internal/protected/private (z uwagą o file)” jest bezpłatna?

Tak — pełny tekst „public/internal/protected/private (z uwagą o file)” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 3 lekcji w sumie.

Co nauczysz się w „public/internal/protected/private (z uwagą o file)”?

Poznaj wpływ public, internal, protected i private na widoczność oraz reguły dziedziczenia i tej samej biblioteki. Uwaga: dostęp na poziomie pliku nie występuje w C# 6. Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C# Academy?

Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 3.

Ile czasu zajmuje lekcja „public/internal/protected/private (z uwagą o file)”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?

Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. public/internal/protected/private (z uwagą o file)
  2. Przestrzenie nazw, dyrektywy using i global usings (uwaga)
  3. Typy częściowe i pliki
← Powrót do C# Academy