我var1在抽象类 AbstractModule 中有受保护的变量
我从父类 AbstractModule创建abstract class AbstractActivity : AbstractModule和使用var1
现在我创建class MyActivity : AbstractActivity并且我希望var1在 MyActivity 类中无法访问。
我该怎么做?
(我可以创建受保护的属性,但是我遇到了同样的问题)
我var1在抽象类 AbstractModule 中有受保护的变量
我从父类 AbstractModule创建abstract class AbstractActivity : AbstractModule和使用var1
现在我创建class MyActivity : AbstractActivity并且我希望var1在 MyActivity 类中无法访问。
我该怎么做?
(我可以创建受保护的属性,但是我遇到了同样的问题)
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
}
}