我有两个班,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;
}
}
谢谢!
答案 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;
}
}
用法是一样的。