(Esta pregunta es un seguimiento de C# accessing protected member in derived class)C# acceso protegido campo
he el siguiente fragmento de código:
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!";
}
}
Ahora, sabemos que private and protected fields are private and protected for type, not instance.
También sabemos que los modificadores de acceso deberían funcionar en tiempo de compilación.
lo tanto, aquí es la cuestión - por qué no puedo acceder al campo de la instancia de la clase
Fox
FurColor
enRedFox
?RedFox
se deriva deFox
, por lo que el compilador sabe que tiene acceso a los campos protegidos correspondientes.Además, como puede ver en
CorrectPaintFox
, puedo acceder al campo protegido de la instancia de claseRedFox
. Entonces, ¿por qué no puedo esperar lo mismo de la instancia de claseFox
?
Hay una [publicación de blog de Eric Lippert sobre ese tema] (http://blogs.msdn.com/b/ericlippert/archive/2005/11/09/491031.aspx). –
¿Por qué? Porque así es como se especificó el idioma: http://msdn.microsoft.com/en-us/library/aa691129 (v = vs.71) .aspx –