我在我的程序中使用了一些静态“形状”类,并且因为每个静态类需要执行相同类型的操作,所以我想知道是否有一种方法可以对方法调用进行泛化。 如果课程不是静态的,我只需使用界面。
以下是我的情况要点:
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语句是否与它将要获得的一样好?
答案 0 :(得分:0)
目前尚不清楚您是否需要单独的Triangle
和Square
类。您可以消除它们,只有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
,我认为以这种方式使用它是很常见和正常的。
但是,您可能有单独的Triangle
和Square
类,并且可以在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();
//...
}
}
}