mig*_*rso 2 c# static constants
我知道,理论上,你不能(也不应该)在 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";
}
Run Code Online (Sandbox Code Playgroud)
然后,我有类 B 扩展了类 A 并添加了一些新的静态常量。我想做的是这样的:
public static class ClassBConstants : ClassAConstants
{
public const string ConstantC = "constant_c";
public const string ConstantD = "constant_d";
}
Run Code Online (Sandbox Code Playgroud)
这样,这四个常量就可以通过 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";
// ...
}
Run Code Online (Sandbox Code Playgroud)
通过该代码,我得到了我最初想要的结果。
选择单例而不是static类。然后,您的班级可以从非static班级可用的功能中受益,并且用户只需进行以下更改:
ClassAConstants.ConstantA... 到 ...ClassAConstants.Instance.ConstantA
顺便说一句,如果您只对consts 感兴趣,那么下面的代码也可以编译。然后您可以从这些类的实例访问这些常量,或者直接使用类名(如访问静态成员)。
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";
}
Run Code Online (Sandbox Code Playgroud)
这是可能的,因为consts 是隐式的static。
ClassAConstants.ConstantA..有效。
ClassBConstants.ConstantA..有效。
| 归档时间: |
|
| 查看次数: |
11684 次 |
| 最近记录: |