如何使受保护的成员无法在“孙子”课程中访问

时间:2013-10-14 13:06:05

标签: c# oop inheritance protected

我在抽象类AbstractModule

中有受保护的变量var1

我创建abstract class AbstractActivity : AbstractModule并使用父类AbstractModule

中的var1

现在我创建了class MyActivity : AbstractActivity,我希望在MyActivity类中无法访问var1

我该怎么办?

(我可以创建受保护的属性,但后来我遇到了同样的问题)

1 个答案:

答案 0 :(得分:2)

C#不允许这样做。但是,您可以通过创建具有相同名称的字段来隐藏类AbstractActivity中的字段。然后,您的班级MyActivity可以访问带阴影的字段及其值,但不能访问AbstractModule中定义的字段。

  public class A
  {
     protected bool seeMe;
  }

  public class B : A
  {
     public B()
     {
        base.seeMe = false; // this is A.seeMe
     }

     protected bool seeMe;
  }

  public class C : B
  {
     public C()
     {
        seeMe = true; // this is B.seeMe
     }
  }

上面的示例不会阻止使用阴影字段编写代码。如果程序员知道A.seeMe并认为它已被设置,这可能会引起混淆。使用B.seeMe时,可以通过使用Obsolete属性进行装饰来强制编译错误:

  public class B : A
  {
     public B()
     {
        base.seeMe = false; // this is A.seeMe
     }

     [Obsolete("cannot use seeMe", error:true)]
     protected bool seeMe;
  }

  public class C : B
  {
     public C()
     {
        seeMe = true; // this will give a compile error
     }
  }