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.cs
Assembly2.cs
.
Pierwszy plik zawiera publiczną klasę bazową , BaseClass
i typ pochodzący z niego. DerivedClass1
BaseClass
jest właścicielem prywatnego chronionego elementu członkowskiego , myValue
któ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#.