在我的应用程序中,我处理了几个不同的“参数”,它们源自 IParameter
接口(interface),以及ParamBase
抽象基类。我目前有两种不同的参数类型,称它们为FooParameter
和BarParameter
,两者均源自 ParamBase
。显然,我可以将它们都视为 IParameter
当我需要一般性地处理它们时,或者当我需要处理它们的特定功能时检测它们的特定类型。
我的问题在于具体FooParameter
s。我目前有一些特定的类,它们有自己的类,这些类派生自 FooParameter
,我们将它们称为 FP12
, FP13
, FP14
等等。这些都有一定的特点,这使得我在UI上区别对待它们。 (大多数都有与各个位或位范围相关的名称)。请注意,这些特定的派生 FP 没有与之关联的附加数据,只有属性(以不同方式引用相同的数据)或方法。
现在,我想将所有这些参数保存在 Dictionary<String, IParameter>
中以便于通用访问。问题是,如果我想引用一个具有特殊 GUI 功能的特定函数,我不能写:
FP12 fp12 = (FP12)paramList["FP12"]
因为你不能向下转换为派生类型(理所当然)。但就我而言,我没有添加任何数据,因此理论上强制转换是可行的。
我应该使用什么类型的编程模型?谢谢!
最佳答案
这种方法没有什么问题,除了可能将参数存储在字典中之外。这样做的目的是什么?尤其是当你输入他们的类(class)名称时。
我只会使用 List<IParameter>
并让一个控件遍历集合并从中选择正确的子类。
m_Parameters = new List<IParameter>();
//This control needs FP12
foreach(var param in Parameters) {
var fp12 = param as FP12;
if (fp12 != null) {
//do something with the param.
break;
}
}
写完上面的内容后,我想我终于明白你想要做什么了。如果您想要执行 FP12
上可用的操作在 FooParameter
的任何子类上那么你需要从 FooParameter
中取出该操作共。由于您的参数是数据,并且该数据在FooParameter
的不同子类中是相同的。 ,只有一个 FooParameter
的实现是有意义的(“数据”类)和多个“操作”类。
//The one implementation of IParameter for all FooParameters
public class FooParameter : IParameter {
string Data1 {get;set;}
}
//base class for Foo Operation, only stores FooParameter
public class FooOperationBase {
protected readonly FooParameter m_Param;
public FooOperationBase (FooParameter param) {
m_Param = param;
}
}
//specific operations on FooParameter go in this class
public class FooOperation12 : FooOperationBase {
public FooOperation12(FooParameter param) : base(param) {}
public void DoSomeOperation() {
return m_Param.Data1 + " transformed";
}
}
关于c# - 仅添加新方法而不添加数据时使用什么 OOP 模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2962752/