C#中的静态类,有什么优缺点?

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

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

LiveObjects.cs

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

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

优点:

  • 容易接近
  • 易于编码

缺点:

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

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

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

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

我并不认为这是一个严肃的答案,但正如你所发现的那样,在专业人士中,这是非常简单的到达你的实体。

其中有些人讨厌静态课程,以至于他们不会雇用你,因为你已经习惯了。 http://thegrenade.blogspot.com/2009/01/static-methods-and-classes-are-always.html

我认为静态类的使用很好 – 特别是在单线程应用程序中。 像其他人所说的那样,你唯一的选择是传递包含这些列表的某种上下文对象。

在这种情况下,我个人的观点是,您已经为您的问题选择了最佳解决方案。 它易于实施,易于使用,并且如果需要的话可以轻松更改。