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.
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
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.
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
- public/internal/protected/private (z uwagą o file)
- Przestrzenie nazw, dyrektywy using i global usings (uwaga)
- Typy częściowe i pliki