Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das protected-Schlüsselwort ist ein Zugriffsmodifizierer für Member.
Hinweis
In diesem Artikel wird der Zugriff behandelt protected . Das protected Schlüsselwort ist auch Teil der protected internal- und private protected-Zugriffsmodifizierer.
Sie können auf ein geschütztes Element innerhalb seiner Klasse und durch abgeleitete Klasseninstanzen zugreifen.
Einen Vergleich mit protected den anderen Zugriffsmodifizierern finden Sie unter Barrierefreiheitsstufen.
Die C#-Sprachreferenz dokumentiert die zuletzt veröffentlichte Version der C#-Sprache. Außerdem enthält sie eine erste Dokumentation zu Funktionen in der öffentlichen Vorschau für die kommende Sprachversion.
In der Dokumentation werden alle Features identifiziert, die in den letzten drei Versionen der Sprache oder in der aktuellen öffentlichen Vorschau eingeführt wurden.
Tipp
Informationen dazu, wann ein Feature erstmals in C# eingeführt wurde, finden Sie im Artikel zum Versionsverlauf der C#-Sprache.
Sie können auf ein geschütztes Element einer Basisklasse in einer abgeleiteten Klasse nur zugreifen, wenn der Zugriff über den abgeleiteten Klassentyp erfolgt. Betrachten Sie beispielsweise das folgende Codesegment:
namespace Example1
{
class BaseClass
{
protected int myValue = 123;
}
class DerivedClass : BaseClass
{
static void Main()
{
var baseObject = new BaseClass();
var derivedObject = new DerivedClass();
// Error CS1540, because myValue can only be accessed through
// the derived class type, not through the base class type.
// baseObject.myValue = 10;
// OK, because this class derives from BaseClass.
derivedObject.myValue = 10;
}
}
}
Die Anweisung baseObject.myValue = 10 generiert einen Fehler, da sie über einen Basisklassenverweis (baseObject ist vom Typ BaseClass) auf das geschützte Element zugreift. Sie können nur über den abgeleiteten Klassentyp oder von ihr abgeleitete Typen auf geschützte Member zugreifen.
Im Gegensatz dazu private protectedermöglicht der protected Zugriffsmodifizierer den Zugriff von abgeleiteten Klassen in jeder Assembly. Im Gegensatz dazu protected internallässt es keinen Zugriff von nicht abgeleiteten Klassen innerhalb derselben Assembly zu.
Sie können Struct-Member nicht als geschützt deklarieren, da Strukturen nicht geerbt werden können.
In diesem Beispiel wird die Klasse DerivedPoint von Point abgeleitet. Daher können Sie direkt von der abgeleiteten Klasse aus auf die geschützten Member der Basisklasse zugreifen.
namespace Example2
{
class Point
{
protected int x;
protected int y;
}
class DerivedPoint: Point
{
static void Main()
{
var dpoint = new DerivedPoint();
// Direct access to protected members.
dpoint.x = 10;
dpoint.y = 15;
Console.WriteLine($"x = {dpoint.x}, y = {dpoint.y}");
}
}
// Output: x = 10, y = 15
}
Wenn Sie die Zugriffsebenen von x und y zu privat ändern, gibt der Compiler die Fehlermeldungen zurück:
'Point.y' is inaccessible due to its protection level.
'Point.x' is inaccessible due to its protection level.
Im folgenden Beispiel wird veranschaulicht, dass protected-Member von abgeleiteten Klassen aus zugänglich sind, auch wenn sie sich in verschiedenen Assemblys befinden.
// Assembly1.cs
// Compile with: /target:library
namespace Assembly1
{
public class BaseClass
{
protected int myValue = 0;
}
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
namespace Assembly2
{
using Assembly1;
class DerivedClass : BaseClass
{
void Access()
{
// OK, because protected members are accessible from
// derived classes in any assembly
myValue = 10;
}
}
}
Diese assemblyübergreifende Zugänglichkeit unterscheidet protected von private protected (was den Zugriff auf dieselbe Assembly einschränkt), ist jedoch protected internal ähnlich (wobei protected internal auch den Zugriff auf dieselbe Assembly von nicht abgeleiteten Klassen aus ermöglicht).
C#-Sprachspezifikation
Weitere Informationen finden Sie unter "Deklarierte Barrierefreiheit in der C#-Sprachspezifikation". Die Sprachspezifikation ist die endgültige Quelle für C#-Syntax und -Verwendung.