C# does not allow this. But you can shadow the field in your class AbstractActivity
by creating one with the same name. Your class MyActivity
would then have access to the shadowed field and its value, but not to the field defined in 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
}
}
The above example doesn't prevent code from being written that uses the shadow field. This may cause confusion if the programmer is aware of A.seeMe
and thinks it is being set. You can force a compile error when B.seeMe
is used by decorating it with the Obsolete attribute:
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
}
}