在单独的命名空间中处理重复类的最佳实践

时间:2014-01-25 17:14:18

标签: c# json class xna namespaces

我使用XNA作为游戏的框架。在我的Input课程中,我使用XNA获取键盘状态并检测按键:

namespace MyGame.Classes
{
    public class Input : IInput
    {
        public bool DetectKey( Keys key )
        {
            if ( Keyboard.GetState().IsKeyDown( key ) )
            {
                return true;
            }

            return false;
        }
    }
}

最近我'一直在试图整合Newtonsoft.Json为我的游戏管理的配置设置。在另一个类中,我读了JSON文件:

{
    "Settings": {
        // ...
    },
    "Controls": {
        "Keyboard": {
            "W": "Up",
            "A": "Left",
            "S": "Down",
            "D": "Right"
        }
    }
}

然后我将JSON转换为强类型对象:

namespace MyGame.Classes
{
    public class Config
    {
        public Settings Settings = new Settings();
        public Controls Controls = new Controls();
    }

    public class Controls
    {
        public Keyboard Keyboard = new Keyboard();
    }

    public class Keyboard
    {
        public string W = "Default";
        public string A = "Default";
        public string S = "Default";
        public string D = "Default";
    }
}

我遇到的问题是,我想在我的Keyboard类中使用MyGame.Classes.Keyboard类(Microsoft.Xna.Framework.Input.KeyboardInput),如下所示:

namespace MyGame.Classes
{
    public class Input : IInput
    {
        public bool DetectUp( Config config )
        {
            // Convert string to enum
            var key = GetKey( config.Controls.Keyboard.W );
            return DetectKey( key );
        }
    }
}

显然编译器对此并不满意。我一直在寻找解决方案,但大多数提出此问题的人都可以控制这两个名称空间。我不确定如何根据我的情况调整任何这些解决方案:

我尝试将其添加到Input的顶部:

using Keyboard = Microsoft.Xna.Framework.Input.Keyboard;
using KeyboardConfig = MyGame.Classes.Keyboard;

这不起作用,因为编译器仍尝试使用MyGame.Classes.Keyboard来解析类中的每个Keyboard

对我来说,最好的方法是什么?

1 个答案:

答案 0 :(得分:3)

你是对的,你应该使用那些使用语句标识符的那些。

我猜这不起作用,因为你把类名放在using语句中和/或使用了与类名相同的标识符名称。

你尝试过这样的事吗?

using kb = Microsoft.Xna.Framework.Input;

var test = kb.Keyboard.GetState(...);