C#在子类中隐藏受保护变量(或以其他方式解决问题)

Rya*_*van 3 c# inheritance

我不认为这是可能的,但我很好奇.是否可以在其子类中的超类私有中创建受保护的变量.

例如,我有三个类SuperClass,SubClass : SuperClassSubCLass2 : SubClass.

我希望能够访问的变量protected string[] commands是在SuperClassSubClass从,但阻止访问它SubClass2.

如果这是不可能的,那么无论如何都能达到同样的效果吗?

Jon*_*eet 7

我不认为这是可能的,但我很好奇.是否可以在其子类中的超类私有中创建受保护的变量.

不会.就个人而言,我会首先避免使用变量非私有 - 我会提供受保护的财产.你可以创建一个新的属性来"隐藏"基本属性......但这对我来说是糟糕的设计.

想不出有什么方法可以绕过从大孩子的角度来隐藏,而不用改变其中一个类,但对我来说这感觉很随意:

public class Base
{
    private int foo = 5;
    protected int Foo { get { return foo; } }
}

public class Child : Base
{
    protected new int Foo { get { return 0; } }
}

public class GrandChild : Child
{
    // Aargh, can't get at the original Foo...
}
Run Code Online (Sandbox Code Playgroud)

你为什么要这样做?也许你应该密封你的直接子类,并强迫其他类使用组合代替......

编辑:正如评论中所解释的那样,听起来这是一种情况,即制作属性(我仍然会使其成为返回私有字段的属性)内部是合适的.这使得属性可以访问同一程序集中的所有其他代码,但不能访问其他程序集.