4

我在我的程序中使用了一些静态“形状”类,并且由于每个静态类都需要执行相同类型的操作,我想知道是否有一种方法可以泛化方法调用。如果这些类不是静态的,我会简单地使用一个接口。

这是我的情况的要点:

public static Triangle
{

  public int getNumVerts()
  {
    return 3;
  }

  public bool isColliding()
  {
    return Triangle Collision Code Here
  }

}

public static Square
{

  public int getNumVerts()
  {
    return 4;
  }

  public bool isColliding()
  {
    return Square Collision Code Here
  }

}

我更喜欢做的是简单地调用Shape.getNumVerts(),而不是我当前的 switch 语句:

switch (ShapeType)
{
  case ShapeType.Triangle:
      Triangle.GetNumVerts();
  case ShapeType.Square:
      Square.GetNumVerts();
}

如果我使用单例而不是静态类,我可以简单地使用多态性,但是要避免单例,并且我需要传递大量引用,以便我可以根据需要对各个形状进行处理。

有没有办法对这些静态类进行分组,或者 switch 语句是否和它一样好?

4

1 回答 1

0

目前尚不清楚您是否需要单独TriangleSquare课程。您可以消除它们,并且只有Shape带有接受ShapeType参数的方法的类。但它实际上也带有switch

public static class Shape
{
    public static int GetNumVerts(ShapeType type)
    {
        switch (type)
        {
            case ShapeType.Triangle:return 3;
            case ShapeType.Square:return 4;
            //...
        }
    }
}

至于switch,我想这样使用它是很常见和正常的。

然而,您可能有单独的TriangleSquare类,并在Shape.GetNumVerts方法中进行切换。它会让你调用Shape.GetNumVerts(ShapeType.Triangle);,即被switch封装在Shape类中并且只在那里使用一次。

public static class Shape
{
    public static int GetNumVerts(ShapeType type)
    {
        switch (type)
        {
            case ShapeType.Triangle:return Triangle.GetNumVerts();
            case ShapeType.Square:return Square.GetNumVerts();
            //...
        }
    }
}
于 2012-12-27T05:47:46.940 回答