c# - 在 C# 中派生静态类

标签 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";
}

然后,我有 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/

相关文章:

c# - 不一致的可访问性字段类型调用静态类中的静态字段

c++ - 为什么 `const T&` 不确定是 const?

c++ - 为什么字符串文字是 const?

java - 为什么我不能使用静态上下文中的 "super"变量,即使 "super"指的是父类而不是类实例,这与 "this"不同?

http - 在 Pyramid 中通过 https 提供静态文件

c++ - 在类中声明一个数组,并使用构造函数设置其大小

c# - 如何使用 ASP.NET MVC 在单击按钮时导出 Excel 工作表中的数据

c# - 在没有 Json.Net 的情况下反序列化 Json 字符串(在 C# 中)

c# - 如何在显示 ContextMenuStrip 时接收鼠标移动事件?

c# - WebAPI OAuth 注销 - 如何删除 token Cookie?