【问题标题】:How to let subclass specify details such as name and description如何让子类指定名称和描述等详细信息
【发布时间】:2009-01-19 19:33:57
【问题描述】:

我有一个名为 ICommand 的接口,各种类都从该接口继承。这些类都使用 Run() 方法做各种不同的事情,但它们都需要有一个 Name 属性和一个 Description 属性来指定它们的作用。

问题是,我应该如何让每个子类指定这些属性(名称和描述)。目前,我已经在 ICommand 中为这两个属性添加了一个属性,并且我让每个子类都实现了这些属性,并且其中只有一个 return "Blah Blah Blah" 语句。这是最好的方法吗?还是应该换一种方式?

抱歉,这似乎是一个愚蠢的问题 - 我刚刚开始使用这种 OOP 设计内容,我想检查一下我做得对。

【问题讨论】:

    标签: c# oop


    【解决方案1】:

    我认为,在界面中定义一个只读属性是最好的方法。

    【讨论】:

      【解决方案2】:

      我写了一些类似的东西(插件),其中每个类都有不同的名称和描述,并最终按照 Sebastian 所说的那样实现,带有 ReadOnly 属性

      interface ICommand {
      string Name { get; }
      string Description { get; }
      ...
      
      classSpecific : ICommand {
      public string Name { get { return "Specific"; }}
      public string Description { get { return "Specific description"; }}
      ...
      

      【讨论】:

        【解决方案3】:

        这通常是我采用的方法。我发现要求子类覆盖虚拟属性或方法以返回描述性标识符是相当容易和快速的。我想你可以使用反射做类似的事情,但你肯定会受到性能影响。

        【讨论】:

          【解决方案4】:

          据说类实现了一个接口,而不是从它继承,因为接口没有实现(因此没有什么可继承的)。您当然可以做您正在做的事情,如果 Name 和 Description 属性对您的所有类型都是唯一的,那么您最终会得到多个实现。如果我理解正确的话,这没什么错。

          【讨论】:

            【解决方案5】:

            你走在正确的道路上。您所描述的内容类似于Strategy Pattern,其中您有几个实现接口的类(实际接口或抽象类)然后有自己的方法实现。

            【讨论】:

              【解决方案6】:

              如果每个实现类的 Name 和 Description 属性都不同,那么无论如何,做你正在做的事情。强制每个类实现这些属性(通过您的接口)并让它们提供详细信息。但是,如果许多类的名称和描述可以相同(尽管名称和描述可能不会发生),那么您的另一种选择将是一个抽象类,其中 Run() 是一个抽象方法,而名称和描述是虚拟属性。

              【讨论】:

                猜你喜欢
                • 2021-06-28
                • 1970-01-01
                • 2021-07-12
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-01-20
                • 1970-01-01
                相关资源
                最近更新 更多