(To pytanie jest kontynuacją C# accessing protected member in derived class)C chronione # dostęp pole
Mam następujący fragment kodu:
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!";
}
}
Teraz wiemy, że private and protected fields are private and protected for type, not instance.
Wiemy również, że modyfikatory dostępu powinny działać podczas kompilacji.
Tak tu jest pytanie - dlaczego nie mogę uzyskać dostęp do pola instancji
Fox
klasyFurColor
wRedFox
?RedFox
pochodzi zFox
, więc kompilator wie, że ma dostęp do odpowiednich pól chronionych.Ponadto, jak widać w
CorrectPaintFox
, mogę uzyskać dostęp do chronionego pola instancji klasyRedFox
. Dlaczego więc nie mogę oczekiwać tego samego z instancji klasyFox
?
Istnieje [wpis na blogu autorstwa Erica Lipperta na ten temat] (http://blogs.msdn.com/b/ericlippert/archive/2005/11/09/491031.aspx). –
Dlaczego? Ponieważ tak określono język: http://msdn.microsoft.com/en-us/library/aa691129 (v = vs.71) .aspx –