Udostępnij przez


ochrona prywatna (odwołanie w C#)

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 protected polecenia , 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#.

Zobacz także