Udostępnij za pośrednictwem


ochrona prywatna (odwołanie w C#)

Kombinacja private protected słowa kluczowego jest modyfikatorem dostępu do składowych. Prywatny chroniony element członkowski jest dostępny dla typów pochodzących z klasy zawierającej, ale tylko w ramach jego zestawu zawierającego. Aby zapoznać się z private protected porównaniem z innymi modyfikatorami dostępu, zobacz Poziomy ułatwień dostępu.

Uwaga

Modyfikator private protected dostępu jest prawidłowy w języku C# w wersji 7.2 lub nowszej.

Przykład

Prywatny chroniony element członkowski klasy bazowej jest dostępny z typów pochodnych w zestawie zawierającym tylko wtedy, gdy typ statyczny zmiennej jest typem klasy pochodnej. Rozważmy na przykład następujący segment kodu:

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 i Assembly1.csAssembly2.cs. Pierwszy plik zawiera publiczną klasę bazową , BaseClassi typ pochodzący z niego. DerivedClass1 BaseClass jest właścicielem prywatnego chronionego elementu członkowskiego , myValuektóry DerivedClass1 próbuje uzyskać dostęp na dwa sposoby. Pierwsza próba uzyskania dostępu myValue za pośrednictwem wystąpienia BaseClass programu spowoduje wystąpienie błędu. Jednak próba użycia go jako dziedziczonego elementu członkowskiego DerivedClass1 zakończy się powodzeniem.

W drugim pliku próba uzyskania dostępu myValue jako dziedziczony element członkowski DerivedClass2 programu spowoduje wystąpienie błędu, ponieważ jest on dostępny tylko dla typów pochodnych w zestawie 1.

Jeśli Assembly1.cs zawiera te InternalsVisibleToAttribute nazwy Assembly2, klasa DerivedClass2 pochodna będzie miała 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.

Nie można dziedziczyć private protected składowych struktury, ponieważ nie można dziedziczyć struktury.

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 też