c# - 仅添加新方法而不添加数据时使用什么 OOP 模式?

标签 c# oop casting

在我的应用程序中,我处理了几个不同的“参数”,它们源自 IParameter接口(interface),以及ParamBase抽象基类。我目前有两种不同的参数类型,称它们为FooParameterBarParameter ,两者均源自 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/

相关文章:

c# - 绑定(bind)到队列 <string>。 UI永不更新

c# - 删除列表中项目的最快方法

c++ - C/C++ 中的显式转换

c# - 获取错误返回,SQL - 如果

c# - Xamarin Forms iOS 应用程序在突然启动时崩溃

java - 面向对象设计——暂停功能

android - 混淆理解类/对象 :D

python - python抽象基类的惯用多重继承

c++ - 指针变量在数组内使用float计算平均值C++

r - CAST ERROR IN R Error in `[.data.frame` (data,, variables, drop = FALSE) : undefined columns selected