我有一个名为ICommand的接口,各种类都从该接口继承。这些类都使用Run()方法执行各种不同的操作,但它们都需要具有Name属性和Description属性,以指定它们的作用。
问题是,我应该如何让每个子类指定这些属性(名称和描述)。目前我已经在ICommand中放置了两个属性,我得到每个子类来实现这些属性,并且只有一个return "Blah Blah Blah"
语句。这是最好的方法吗?或者应该以另一种方式完成?
对不起,如果这看起来像一个愚蠢的问题 - 我只是从这个OOP设计开始,我想检查我做得对。
答案 0 :(得分:1)
我认为,在界面中定义一个Readonly属性是最好的方法。
答案 1 :(得分:1)
我写了类似的东西(插件),其中每个类都有不同的名称和描述,最终实现为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"; }}
...
答案 2 :(得分:0)
这通常是我采取的方法。我发现要求子类覆盖虚拟属性或方法以返回描述性标识符是相当容易和快速的。我想你可以用反射来做类似的事情,但你肯定会受到性能影响。
答案 3 :(得分:0)
据说类实现了一个接口,而不是从接口继承,因为接口没有实现(因此没有任何继承)。你当然可以做你正在做的事情,如果Name和Description属性对你的所有类型都是唯一的,你最终会有多个实现。如果我理解正确的话,没有错。
答案 4 :(得分:0)
你走在正确的道路上。您所描述的内容类似于Strategy Pattern,其中您有几个实现接口的类(实际接口或抽象类),然后有自己的方法实现。
答案 5 :(得分:0)
如果每个实现类的Name和Description属性不同,那么无论如何都要做你正在做的事情。强制每个类实现这些属性(通过您的界面)并让它们提供详细信息。但是,如果许多类的名称和描述可能相同(虽然名称和描述可能不会发生),那么您的另一个选择是抽象类,其中Run()是一个抽象方法,Name和描述是虚拟属性。