我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
}
}