我是否以正确的方式使用静电?

Nei*_*ght 5 c# xna static-variables

我正在编写一个XNA引擎,我将所有模型存储在一个List.为了能够在整个引擎中使用它,我已经做了这个,public static List<Model>所以我可以从我开发的任何新类访问它.它当然使获得模型列表真的很容易获得,但这是正确的用法吗?或者我会更好地在方法声明中传递变量?

Ily*_*gan 5

在OOP中,通常建议避免使用静态方法和属性,除非您有充分的理由这样做.其中一个原因是,由于某种原因,将来您可能希望拥有此列表的两个或更多实例,然后您将陷入静态调用.

静态方法和属性太僵硬了.正如Stevey所述:

静态方法与花岗岩一样灵活.每次使用一个,你都会在具体的时候投入你的程序的一部分.当你看着它变硬时,确保你的脚没有卡在那里.有一天,你会惊讶地发现,通过天哪,你真的需要另一个实现那个dang PrintSpooler类,它应该是一个接口,一个工厂和一组实现类.D'哦!


And*_*ell 5

对于游戏开发,我提倡"做最可能工作的最简单的事情".这包括使用全局变量(public static在C#中),如果这是一个简单的解决方案.你可以随时把它变成更正式的东西.Visual Studio中的"查找所有引用"工具使这非常简单.

话虽如此,极少数情况下全局变量实际上是做某事的"正确"方式.因此,如果您打算使用它,您应该了解理解正确的解决方案.因此,您可以在"懒惰"和"编写好代码"之间做出最佳权衡.

如果你想要创造一些全球化的东西,你需要完全理解你为什么要这样做.

在这种特殊情况下,听起来你正试图尝试获取内容.您应该知道,如果您多次请求,ContentManager它将自动返回相同的内容对象.因此,而不是装载模式为全球性的列表,请考虑您的Game类的内置ContentManager可通过public static你的财产Game类.

或者,更好的是,有一种我更喜欢的方法,我觉得有点好:我在另一个问题的答案中解释它.基本上,你做的内容引用private static中使用它们并通过类ConentManagerpublic static LoadContent功能.这compartmentalises您的静态使用个人类,而不是使用从在你的程序访问的全球性(这将是以后难以自拔).它还可以在正确的时间正确处理加载内容.