【发布时间】:2012-11-27 15:44:57
【问题描述】:
可能重复:
Why can’t I access C# protected members except like this?
当我在阅读一本 c# 书籍时(特殊的注释版本,它显示了 c# 的所有棘手部分)
我看到了这段代码:
public class A
{
protected int x;
static void F(A a, B b)
{
a.x = 1; // Okay
b.x = 1; // Okay
}
}
public class B: A
{
static void F(A a, B b)
{
a.x = 1; // Error: must access through instance of B
b.x = 1; // Okay
}
}
看着protected意思:
访问仅限于此类或从此类派生的类
问题
为什么存在这个限制(通过instances)?
您能否请提供一个问题情况的示例,就好像它是允许的一样?
【问题讨论】:
-
这是一个 msdn 示例,并删除了重要部分:在 A 中,可以通过 A 和 B 的实例访问 x,因为在任何一种情况下,访问都是通过 A 的实例进行的或从 A 派生的类。但是,在 B 中,无法通过 A 的实例访问 x,因为 A 不是从 B 派生的。如果您通过 cx = 从 B 派生 C,您甚至可以操作 x,但不能通过一个。你可以访问当前类的实例变量,而不是父类的实例。