我似乎不理解受保护的访问修饰符
通过阅读msdn,似乎我可以在A类中声明一个属性PROTECTED。
让B类继承自A类,然后访问该属性。
我的问题是当我实例化B类时,我无法访问A类受保护的方法。下面的Psuedo代码
class a
{
protected int steve {get;set}
}
class b:a
{}
console app
private foo = new class b();
foo.steve = 3;
我理解这段代码无法编译,我正在寻找关于为什么我无法从实例化版本的B访问史蒂夫的理论。非常感谢您的帮助。
答案 0 :(得分:4)
protected
个成员,但对于其他成员,它就像private
。
这意味着:
您可以访问steve
或a
成员中的b
或任何其他衍生类型。但您无法从外部访问steve
。
答案 1 :(得分:4)
您正在从课程b外部访问它。这样可行,因为它是从类b内部访问的。
class a
{
protected int steve {get;set}
}
class b:a
{
public void foo() {
steve = 4;
}
}
答案 2 :(得分:2)
Protected
类似于private,因为声明方法,变量等的类可以使用它,但它也公开了要在子类中使用的方法或变量。
答案 3 :(得分:1)
“b”可以看到“a”的受保护成员,因为“b”是“a”,但是当尝试调用“b”时,您无法看到“a”受保护的成员。您可以通过将“steve”公开,然后在属性上的“get”和“set”上更改修饰符以获得不同结果来进行实验。即您只能从“b”设置属性,但可以从任何地方获取。
答案 4 :(得分:1)
protected
修饰符允许派生类在其声明的范围内访问成员。对外界protected
与private
class a {
protected int steve {get;set}
}
class b : a {
void Example() {
steve = 42; // legal. Access protected within the declaration
}
}
class Program {
public static void Main() {
b local = new b();
local.steve = 13; // Error! Outside b`s declaration steve is effectively private
}
}