【问题标题】:How to make a variable available to all classes in XNA/monogame?如何使变量可用于 XNA/monogame 中的所有类?
【发布时间】:2013-11-24 16:10:04
【问题描述】:

我的 XNA/Monogame 塔防中有几个变量需要在类之间传递。不幸的是,它们中的许多都是自动生成的,所以我不能只引用它们。有什么像我可以使用的全局变量吗?这又是在 Monogame(XNA) / C# 中。

【问题讨论】:

    标签: c# xna monogame


    【解决方案1】:

    只需创建一个静态类,您将在其中存储所有全局变量,并且可以从您的所有类中访问它。

    public static class MyGlobals
    {
        public static int LevelNumber { get; set; }
        public static string CurrentScore { get; set; }
        ...
    }
    

    并通过

    从任何地方访问它
    public class AnotherClass
    {
        public void SomeMethod()
        {
            MyGlobals.LevelNumber = ...
            string score = MyGlobals.CurrentScore;
        }
    }
    

    【讨论】:

    • 这是问题的答案,但我对此感到非常矛盾,因为如果你不小心,它会导致一些非常坏的习惯。全局静态状态是迟早会回来咬你的东西之一。考虑如果您想引入多线程、单元测试、可重用性或许多其他原因会发生什么。如果你必须走这条路,至少先阅读风险,并考虑如果可能的话如何使用某种形式的依赖注入。 programmers.stackexchange.com/questions/148108/…
    • 是的,我同意。当您希望能够保存和加载游戏时,我更关心序列化。不过,我不会为可重用性和单元测试而烦恼。他在做游戏。至于并发环境,要时刻注意。
    • 当然,创建一个单例。但它仍然归结为这些问题。您还可以利用某种应用程序设置左右,但这基本上意味着将此设置保存在文件中,在您需要经常访问它们之前,这不是一个坏主意。我猜静态类是最小的邪恶。
    • 如果你不能使用构造函数注入,那么最好的办法就是属性注入。还有其他需要考虑的事情......工厂模式,服务定位器。我们确实需要了解有关您的情况的更多详细信息。
    • 好吧,我的情况是我需要将几个变量传递给我的主类。我很好奇什么是属性注入(初学者程序员)?我想我将只使用一个静态类,因为我只有一些需要传递的变量。
    猜你喜欢
    • 2021-08-19
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    相关资源
    最近更新 更多