c# - 如何处理因实现类而异的静态字段

标签 c# java

我一直都遇到这个问题。假设我正在制作一个命令行界面(Java 或 C#,我认为问题是一样的,我将在此处显示 C#)。

  1. 我定义了一个接口(interface) ICommand
  2. 我创建了一个实现 ICommand 的抽象基类 CommandBase,以包含通用代码。
  3. 我创建了几个实现类,每个都扩展了基类(并扩展了接口(interface))。

现在 - 假设接口(interface)指定所有命令实现 Name 属性和 Execute 方法...

对于名称,我的每个实例类都必须返回一个字符串,该字符串是该命令的名称。该字符串(“HELP”、“PRINT”等)对于相关类是静态的。我希望能够做的是定义:

公共(public)抽象静态常量字符串名称;

但是(遗憾的是)您不能在接口(interface)中定义静态成员。

多年来我一直在为这个问题而苦苦挣扎(几乎任何地方我有一个类似类(class)的家庭),所以我将在下面发布我自己的 3 种可能的解决方案供您投票。然而,由于它们都不是理想的,我希望有人会发布更优雅的解决方案。


更新:

  1. 我无法使代码格式正常工作(Safari/Mac?)。抱歉。
  2. 我使用的示例很简单。在现实生活中,有时会有几十个实现类和几个这种半静态类型的字段(即对实现类是静态的)。

  3. 我忘了提 - 理想情况下我希望能够静态查询此信息:

    字符串名称 = CommandHelp.Name;

我提出的 3 个解决方案中有 2 个要求先实例化该类,然后才能找到这个丑陋的静态信息。

最佳答案

您可以考虑使用属性而不是字段。

[Command("HELP")]
class HelpCommand : ICommand
{
}

关于c# - 如何处理因实现类而异的静态字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66505/

相关文章:

java - 我可以在 Java 程序中使用 Google+ 帐户进行身份识别吗?

c# - Web API OData v4 枚举本地化

java - 如何不选择空字符串

c# - 套接字发送客户端列表

c# - 将 DataGrid 绑定(bind)到 ObservableCollection<Dictionary>

java - 如何在java中检查结果集是否为空或为null

java - TextView无法访问代码

java - Java 中的动态 XML 创建

c# - 将字符串转换为字 rune 本框

c# - Unity3d - 在线多人转