【问题标题】:Static classes in C#, what's the pros/cons?C# 中的静态类,有什么优点/缺点?
【发布时间】:2010-11-22 22:50:27
【问题描述】:

我正在为我的学校作业编写一个小游戏,该游戏是一个简单的 2D 游戏,包含怪物、物品和子弹。基本上你跑来跑去并试图收集所有物品硬币,怪物试图阻止你,你可以用你收集的子弹击落它们。很简单。

问题是,我已将怪物、物品、墙壁、玩家和子弹添加到名为 LiveObjects 的静态类中,然后我可以从代码中的任何位置访问这些对象。这是一个不好的做法吗?有什么替代方案? (不是多线程的)

LiveObjects.cs

internal static class LiveObjects
{        
    public static List<Item> items = new List<Item>(); // List with all the items
    public static List<Monster> monsters = new List<Monster>(); // List with all present monsters
    public static List<Wall> walls = new List<Wall>(); // List with the walls
    public static List<Bullet> bullets = new List<Bullet>(); // List with the bullets
    public static Player player = new Player(0, 0); // The player object
}

我使用很多不同的类来操作 LiveObjects 中的数据,然后为了避免传递整个 List,我可以直接在任何方法中调用它。

【问题讨论】:

  • 根据下面大多数积极的反馈,这是一个很好的解决方案 Patrick,但我会用属性包装你的公共成员,而不是直接公开它们。使用属性将为您提供一些灵活性,并使您能够轻松地使用线程同步来访问您的对象。关于属性的简单教程:msdn.microsoft.com/en-us/library/aa288470(VS.71).aspx

标签: c# class methods static


【解决方案1】:

优点:

  • 轻松访问
  • 轻松编码

缺点:

  • 没有线程安全
  • 无封装
  • 可维护性降低

【讨论】:

    【解决方案2】:

    如果您的应用程序是多线程的,您可能需要考虑有关多线程访问和修改静态实例的问题。这是一篇关于线程的好文章:

    http://www.yoda.arachsys.com/csharp/threads/

    【讨论】:

      【解决方案3】:

      静态类的一个优点是它是唯一可以定义扩展方法的地方。

      【讨论】:

        【解决方案4】:

        我并不打算将其作为一个严肃的答案,但正如您所发现的,在专业人士中,访问您的实体非常简单。

        其中一个缺点是有些人非常讨厌静态类,以至于他们不会雇用你,因为你已经使用了它们。 http://thegrenade.blogspot.com/2009/01/static-methods-and-classes-are-always.html

        【讨论】:

          【解决方案5】:

          我认为静态类的这种用法很好——尤其是在单线程应用程序中。正如其他人所说,您唯一的选择是传递某种包含这些列表的上下文对象。

          在这种情况下,我个人的看法是,您为您的问题选择了最佳解决方案。它易于实施、易于使用,并且在需要时易于更改。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-10-23
            • 2014-03-21
            • 2023-03-17
            • 1970-01-01
            • 1970-01-01
            • 2011-01-29
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多