受保护关键字

时间:2011-03-28 17:32:25

标签: .net

我似乎不理解受保护的访问修饰符

通过阅读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访问史蒂夫的理论。非常感谢您的帮助。

5 个答案:

答案 0 :(得分:4)

可以在派生类中访问

protected个成员,但对于其他成员,它就像private。 这意味着:
您可以访问stevea成员中的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修饰符允许派生类在其声明的范围内访问成员。对外界protectedprivate

没有区别
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
  }
}