1

var1在抽象类 AbstractModule 中有受保护的变量

我从父类 AbstractModule创建abstract class AbstractActivity : AbstractModule和使用var1

现在我创建class MyActivity : AbstractActivity并且我希望var1在 MyActivity 类中无法访问。

我该怎么做?

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

4

1 回答 1

3

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
     }
  }
于 2013-10-14T13:22:39.850 回答