在子 class 中完成嵌套部分 class

Complete nested partial class in child class

我有两个 class,A 和 B。B 继承自 A。

这是我的问题:我有一个常量 ConstantA,它对 class A 很有用,但对子 classes 也很有用。我还有一个常量 ConstantB,它是我的 class B 特有的。

由于我将我的常量存储在 public 静态嵌套 class 中,子 class 中的常量 class 隐藏了父常量。我尝试将其设为部分 class,但没有帮助。有什么办法可以解决这个问题吗?

这是一个例子:

public class A 
{
    public static partial class Constants
    {
        public const int ConstantA = 1;
    }
}

public class B : A 
{
    public static partial class Constants
    {
        public const int ConstantB = 1;
    }
}

谢谢!

只需让您的 ConstantA 成为您父级 class 的属性,将此属性放入嵌套 class 中即可将其从继承 class 的范围中删除。

如果你真的想要嵌套classes,你可以留下static关键字,并为B.Constants嵌套class做继承:

public class A 
{
    public class Constants
    {
        public const int ConstantA = 1;
    }
}

public class B : A 
{
    public new class Constants : A.Constants
    {
        public const int ConstantB = 2;
    }
}

用法相同

您还需要将 A 设为部分 class,并与 B class 本身分开声明您的 B 特定常量:

public partial class A
{
    public static partial class Constants
    {
        public const int ConstantA = 1;
    }
}

public partial class A
{
    public static partial class Constants
    {
        public const int ConstantB = 1;
    }
}

public class B : A
{
    static void M()
    {
        int i = Constants.ConstantB;
        int j = Constants.ConstantA;
    }
}

也就是说,我怀疑设计是否那么好。它具有在 A 内声明您的 ConstantB 值的效果,这似乎与封装的目标相反,假设 ConstantB 确实仅与 class B 相关.如果您以这种方式声明它,ConstantB 可以通过 any 以任何类型使用 Constants class 访问。

但是如果您对此没有意见,并且只是想确保常量的 声明B class 保持一致,那么上面的就可以了。

其他选项包括继续并隐藏(使用 new 关键字)基数 Constants class,但有一点不便,即必须指定基数 class作为完全合格的访问基值(例如 A.Constants.ConstantA),隐藏基 class 并让 B.Constants class 继承 A.Constants(需要放弃 static class 属性)或者,恕我直言,更好的是,根本不使用嵌套的 class,而是将 Constants classes 放在各自的命名空间中。