C#模拟静态类的多态性?

时间:2011-12-20 05:30:54

标签: c# xna xna-4.0

我一直在考虑设计几天,我渐渐100%肯定这是一个设计问题。然而,这是我的困境:我本质上希望有一个编译器检查和多态静态类。具体来说,我有这个:

static class TileSettings
{
    static class TileOne
    {
        public const TileType TYPE = TileType.TileOne;
    }

    static class TileTwo
    {
        public const TileType TYPE = TileType.TileTwo;
    }
}

这看起来很好,但我想让子类遵循TileOneTileTwo可以遵循的契约(如界面),以便代码中的某处可以执行以下操作:

public void function(TileSettings SETTINGS_TO_USE)
{
    someLocalVariable = SETTINGS_TO_USE.TYPE;
}

function(TileOne);
function(TileTwo);

一个主要问题是,我不能将静态类传递给函数。我能做的是有一个静态类,其方法采用TileType并使用开关返回该类型的值。然而,如果最终被调用很多,那么这似乎是非常低效的。那么,有什么想法吗?有什么简单的我不知道会解决这个问题吗?提前感谢您的帮助。

2 个答案:

答案 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);