我一直在考虑设计几天,我渐渐100%肯定这是一个设计问题。然而,这是我的困境:我本质上希望有一个编译器检查和多态静态类。具体来说,我有这个:
static class TileSettings
{
static class TileOne
{
public const TileType TYPE = TileType.TileOne;
}
static class TileTwo
{
public const TileType TYPE = TileType.TileTwo;
}
}
这看起来很好,但我想让子类遵循TileOne
和TileTwo
可以遵循的契约(如界面),以便代码中的某处可以执行以下操作:
public void function(TileSettings SETTINGS_TO_USE)
{
someLocalVariable = SETTINGS_TO_USE.TYPE;
}
function(TileOne);
function(TileTwo);
一个主要问题是,我不能将静态类传递给函数。我能做的是有一个静态类,其方法采用TileType并使用开关返回该类型的值。然而,如果最终被调用很多,那么这似乎是非常低效的。那么,有什么想法吗?有什么简单的我不知道会解决这个问题吗?提前感谢您的帮助。
答案 0 :(得分:3)
如果您需要多态性,解决方案是停止使用静态类。你最初预感这是一个设计问题对我来说听起来很准确。如果没有某种黑客攻击,从维护/可用性/可读性的角度来看无疑会有问题,没有好办法实现这一目标。
也许你需要更像单身人士的东西;你仍然会在下面有实例但通常只引用一个特定的实例。
答案 1 :(得分:0)
是的,答案是:不要使用静态类。
这个怎么样:
class TileSettings
{
public readonly TileType TYPE;
public static readonly TileSettings TileOne = new TileSettings(TileType.TileOne);
public static readonly TileSettings TileTwo = new TileSettings(TileType.TileTwo);
public TileSettings(TileType type)
{
TYPE = type;
}
}
您可以像这样使用它:
public void function(TileSettings settings)
{
someLocalVariable = settings;
}
function(TileSettings.TileOne);
function(TileSettings.TileTwo);