(Diese Frage ist ein Follow-up zu C# accessing protected member in derived class)C# geschützten Bereich Zugang
ich den folgenden Code-Schnipsel haben:
public class Fox
{
protected string FurColor;
private string furType;
public void PaintFox(Fox anotherFox)
{
anotherFox.FurColor = "Hey!";
anotherFox.furType = "Hey!";
}
}
public class RedFox : Fox
{
public void IncorrectPaintFox(Fox anotherFox)
{
// This one is inaccessible here and results in a compilation error.
anotherFox.FurColor = "Hey!";
}
public void CorrectPaintFox(RedFox anotherFox)
{
// This is perfectly valid.
anotherFox.FurColor = "Hey!";
}
}
Jetzt wissen wir, dass private and protected fields are private and protected for type, not instance.
Wir wissen auch, dass Zugriffsmodifikatoren zur Kompilierzeit funktionieren sollten. So
, hier ist die Frage - warum kann ich nicht auf das
FurColor
Feld derFox
Klasseninstanz inRedFox
?RedFox
ist vonFox
abgeleitet, daher weiß der Compiler, dass er Zugriff auf die entsprechenden geschützten Felder hat.Auch, wie Sie in
CorrectPaintFox
sehen können, kann ich auf das geschützte Feld der KlasseninstanzRedFox
zugreifen. Warum kann ich das also nicht von der KlasseninstanzFox
erwarten?
Es gibt einen [Blogbeitrag von Eric Lippert zu diesem Thema] (http://blogs.msdn.com/b/ericlippert/archive/2005/11/09/491031.aspx). –
Warum? Denn so wurde die Sprache spezifiziert: http://msdn.microsoft.com/de-us/library/aa691129 (v = vs.71) .aspx –