Статические классы в C #, в чем плюсы / минусы? - PullRequest
4 голосов
/ 26 августа 2009

Я программирую небольшую игру для школьного задания, игра представляет собой простую 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, а затем, чтобы избежать передачи всего списка, я могу просто вызвать его непосредственно внутри любого метода.

Ответы [ 5 ]

4 голосов
/ 26 августа 2009

Плюсы:

  • Легкий доступ
  • Простое кодирование

Минусы:

  • Нет безопасности потока
  • Нет инкапсуляции
  • Снижение ремонтопригодности
1 голос
/ 26 августа 2009

Одним из преимуществ статических классов является то, что это единственное место, где вы можете определять методы расширения.

1 голос
/ 26 августа 2009

Если ваше приложение является многопоточным, вам, возможно, придется подумать о проблемах, связанных с несколькими потоками, обращающимися и изменяющими статические экземпляры. Вот хорошая статья о потоке:

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

0 голосов
/ 26 августа 2009

Я думаю, что использование статического класса хорошо, особенно в однопоточном приложении. Как уже говорили другие, ваша единственная альтернатива - обойти некоторый контекстный объект, содержащий эти списки.

Мое личное мнение, в данном случае, заключается в том, что вы выбрали лучшее решение для своей проблемы. Он прост в реализации, прост в использовании и легко заменяется в случае необходимости.

0 голосов
/ 26 августа 2009

Я не собираюсь воспринимать это как серьезный ответ, но среди профессионалов, как вы выяснили, очень просто добраться до ваших сущностей.

Среди недостатков - то, что некоторые люди так ненавидят статические классы, что не будут вас нанимать, потому что вы их использовали. http://thegrenade.blogspot.com/2009/01/static-methods-and-classes-are-always.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...