设计一个单独的静态解析器类,它可以访问主类字段

时间:2017-11-10 17:01:51

标签: c# oop

尝试在C#中实现简单的电子表格程序时遇到了以下问题。

我要做的是拥有一个Table类,它基本上是类Cell的对象数组。但是,我想实现一个单独的Parser类,它将接受所有用户输入。然而Parser类的方法需要访问表格的单元格。我不确定应该如何实施。

或许可以通过代码更好地解释:

class Cell
{
  //fields
}

class Table
{
  private Cell[,] cells;
  public Cell At(int key);
}

static class Parser
{
  public static Cell GetCellReference(string userInput)
  {
    //somehow
    //return Table.At(parsedUserInput)
  }
}

我看到实现这一点的一种方法是在Table内实例化一个Parser对象,但这显然违背了解析器类本身的目的。我看到的另一种方法是将Table对象传递给Parser的方法,但这似乎并不合理,因为其目的是只使用一个Table实例。继承似乎不适用于解析器和表之间,因此我发现自己陷入困境。如何在不违反OOP基本原则的情况下更改/修改设计以实现目标?

1 个答案:

答案 0 :(得分:1)

我会

public class Parser
{
   public Parser(Table table){..}
  public ReturnType DoIt(....) {...}
}

然后

var parser = new Parser(myTable);
var res = parser.DoIt(widgetWoo, bar33);

如果您希望PArser是静态的,那么执行

public static class Parser
{
   public ReturnType Parse(Table table,.....){..}
}

然后

var res = Parser.Parse(myTable, widgetWoo, bar33);

然而,我觉得Parser会有很多内部状态。最好是非静态的