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

时间:2009-08-26 10:16:41

标签: c# class methods static

我正在为我的学校作业编写一个小游戏,游戏是一个简单的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,我可以直接在任何方法中调用它。

5 个答案:

答案 0 :(得分:4)

优点:

  • 轻松访问
  • 轻松编码

缺点:

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

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