Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Kombinacja słowa kluczowego private protected jest modyfikatorem dostępu do elementów. Typy pochodzące z klasy i zadeklarowane w zestawie zawierającym mogą uzyskać dostęp do prywatnego chronionego elementu członkowskiego. Aby zapoznać się z private protected porównaniem z innymi modyfikatorami dostępu, zobacz Poziomy ułatwień dostępu.
Dokumentacja języka C# zawiera ostatnio wydaną wersję języka C#. Zawiera również początkową dokumentację dla funkcjonalności w publicznych wersjach testowych nadchodzącego wydania języka.
Dokumentacja identyfikuje dowolną funkcję po raz pierwszy wprowadzoną w ostatnich trzech wersjach języka lub w bieżącej publicznej wersji zapoznawczej.
Wskazówka
Aby dowiedzieć się, kiedy funkcja została po raz pierwszy wprowadzona w języku C#, zapoznaj się z artykułem dotyczącym historii wersji języka C#.
Typy pochodne mogą uzyskiwać dostęp do prywatnej chronionej składowej klasy bazowej w zestawie zawierającym tylko wtedy, gdy typ statyczny zmiennej jest typem klasy pochodnej. Rozważmy na przykład następujący segment kodu:
// Assembly1.cs
// Compile with: /target:library
public class BaseClass
{
private protected int myValue = 0;
}
public class DerivedClass1 : BaseClass
{
void Access()
{
var baseObject = new BaseClass();
// Error CS1540, because myValue can only be accessed by
// classes derived from BaseClass.
// baseObject.myValue = 5;
// OK, accessed through the current derived class instance
myValue = 5;
}
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
class DerivedClass2 : BaseClass
{
void Access()
{
// Error CS0122, because myValue can only be
// accessed by types in Assembly1
// myValue = 10;
}
}
Ten przykład zawiera dwa pliki: Assembly1.cs i Assembly2.cs.
Pierwszy plik zawiera publiczną klasę bazową , BaseClassi typ pochodzący z niego. DerivedClass1
BaseClass posiada prywatnego chronionego członka, myValue, do którego DerivedClass1 może mieć dostęp jako dziedziczonego członka wewnątrz tego samego zestawu.
W drugim pliku próba uzyskania dostępu myValue jako dziedziczony element członkowski DerivedClass2 generuje błąd, ponieważ private protected elementy członkowskie są dostępne tylko dla typów pochodnych w ramach tego samego zestawu. To ograniczenie jest kluczową różnicą od protected (która umożliwia dostęp z klas pochodnych w dowolnym zestawie) i protected internal (która umożliwia dostęp z dowolnej klasy w ramach tego samego zestawu lub klas pochodnych w dowolnym zestawie).
Jeśli Assembly1.cs zawiera te InternalsVisibleToAttribute nazwy Assembly2, klasa DerivedClass2 pochodna ma dostęp do private protected składowych zadeklarowanych w .BaseClass
InternalsVisibleTo sprawia, że private protected elementy członkowskie są widoczne dla klas pochodnych w innych zestawach.
Porównanie z innymi modyfikatorami dostępu chronionego
Poniższa tabela zawiera podsumowanie najważniejszych różnic między trzema modyfikatorami dostępu chronionego:
| Modyfikator dostępu | Ten sam zestaw, klasa pochodna | Ten sam zestaw, klasa nie pochodna | Inny zestaw, klasa pochodna |
|---|---|---|---|
protected |
✔️ | ❌ | ✔️ |
protected internal |
✔️ | ✔️ | ✔️ |
private protected |
✔️ | ❌ | ❌ |
- Użyj
protectedpolecenia , jeśli chcesz, aby klasy pochodne w dowolnym zestawie uzyskiwały dostęp do składowej. - Użyj
protected internal, jeśli chcesz uzyskać najbardziej permissywny dostęp (dowolna klasa w tym samym zestawie lub klasach pochodnych w dowolnym miejscu). - Użyj
private protected, jeśli chcesz uzyskać najbardziej restrykcyjny dostęp chroniony (tylko klasy pochodne w tym samym zestawie).
Nie można zadeklarować private protected elementów członkowskich struktury, ponieważ nie można dziedziczyć struktur.
Specyfikacja języka C#
Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.