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