(この質問は、派生クラスの保護されたメンバーにアクセスする C#のフォローアップです)
次のコード スニペットがあります。
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!";
}
}
これで、 private および protected フィールドは private であり、インスタンスではなく型に対して保護されていることがわかりました。
また、アクセス修飾子はコンパイル時に機能する必要があることもわかっています。
では、ここで質問です。なぜクラス インスタンスのフィールドにアクセスできないのでしょうか。
FurColor
Fox
RedFox
RedFox
から派生しFox
ているため、コンパイラは、対応する保護されたフィールドにアクセスできることを認識しています。また、図でわかるように、クラス インスタンス
CorrectPaintFox
の保護されたフィールドにアクセスできます。では、クラス インスタンスから同じことを期待できないのはなぜでしょうか。RedFox
Fox