在子类中完成嵌套的部分类

时间:2017-03-14 19:23:46

标签: c# inner-classes partial-classes

我有两个班,A和B. B继承自A.

这是我的问题:我有一个常量ConstantA,它对A类很有用,但也适用于子类。我也有一个常量ConstantB,它特定于我的B类。

由于我将常量存储在公共静态嵌套类中,因此子类中的Constants类会隐藏父类。我试过让它成为一个部分类,它没有帮助。有什么方法可以解决这个问题吗?

以下是一个例子:

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

谢谢!

3 个答案:

答案 0 :(得分:1)

只需将ConstantA作为父类的一个属性,将此属性放在嵌套类中就会将其从继承类的范围中删除。

答案 1 :(得分:1)

您还需要将var teams = Teams.find(); var teamNames = [10]; for(i = 0; i < 10; i++) { teamNames.push(teams[i].name); } var chart = new Chart(canvas, { type: 'bar', data: { labels: [teamNames] 作为部分类,并将{B}特定常量与A类本身分开声明:

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; } } 内声明ConstantB值的效果,这似乎与封装目标相反,假设A实际上仅与类ConstantB相关。如果您以这种方式声明,B可以通过任何使用任何类型的ConstantB类来访问。

但是如果你对此感到满意,并且只是想确保常量的声明保留在Constants类中,那么上面的方法就可以了。

其他选项包括继续并隐藏(使用B关键字)基类new类,但由于必须将基类指定为完全限定以访问基值,因此会带来轻微的不便(例如Constants),隐藏基类并使A.Constants.ConstantA类继承B.Constants(需要放弃A.Constants类属性)或者,恕我直言更好,不使用嵌套类完全相反,而是将static类放在各自的命名空间中。

答案 2 :(得分:0)

如果您真的想要嵌套类,可以保留static关键字,并为B.Constants嵌套类做继承:

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

用法是一样的。