我知道,理论上,您不能(也不应该)在 C# 中派生静态类,但我有一个案例,我认为我需要它...我想为类 A 定义一些静态常量而且,正如我很快发现的那样,您不能这样做,所以我遵循了本教程:http://msdn.microsoft.com/en-us/library/bb397677.aspx
所以,我有一个这样的静态类:
public static class ClassAConstants
{
public const string ConstantA = "constant_a";
public const string ConstantB = "constant_b";
}
然后,我有 B 类,它扩展了 A 类并添加了一些新的静态常量。我想做的是:
public static class ClassBConstants : ClassAConstants
{
public const string ConstantC = "constant_c";
public const string ConstantD = "constant_d";
}
这样,四个常量就可以通过 ClassBConstants.ConstantA 或 ClassBConstants.ConstantD 访问。但是,C# 不允许我这样做。
我怎样才能做到这一点?也许解决方案完全不同,我不在乎它是否完全不使用静态常量,只要结果是我想要的即可。
编辑:
感谢 Amby,我发现常量是隐式静态的,所以我真的不需要创建人工静态类(ClassAConstants 和 ClassBConstants)。解决方案再简单不过了:
public class A
{
public const string ConstantA = "constant_a";
public const string ConstantB = "constant_b";
// ...
}
public class B : A
{
public const string ConstantC = "constant_c";
public const string ConstantD= "constant_d";
// ...
}
使用该代码,我得到了最初想要的结果。
最佳答案
选择 Singleton 而不是 static
类。
然后,您的类将受益于非static
类可用的功能,用户只需进行以下更改:
ClassAConstants.ConstantA
... 到 ... ClassAConstants.Instance.ConstantA
顺便说一下,如果您只对const
感兴趣,那么下面的代码也可以编译。然后您可以从这些类的实例访问这些常量,或直接使用类名(如访问静态成员)。
public class ClassAConstants
{
public const string ConstantA = "constant_a";
public const string ConstantB = "constant_b";
}
public class ClassBConstants : ClassAConstants
{
public const string ConstantC = "constant_c";
public const string ConstantD = "constant_d";
}
这是可能的,因为 const
是隐式的 static
。
ClassAConstants.ConstantA
.. 有效。
ClassBConstants.ConstantA
.. 有效。
关于c# - 在 C# 中派生静态类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5282760/