использование статических классов для глобальных объектов в C #

Я использую список частиц.

List<Particle> particles;

Обычно я помещаю этот список в свой класс моделирования. Которая вычисляет положение, скорость и другие свойства частиц.

Некоторые другие классы нуждаются в этих данных о частицах для вывода и постобработки.

можно ли создать статический класс,

static class Particles
{
    static List<Particles> plist;
}

получить доступ к данным о частицах из других классов?


person Kayhano    schedule 31.07.2010    source источник


Ответы (2)


Я бы рекомендовал по возможности держаться подальше от статических классов / методов. Они имеют тенденцию приводить к сильному связыванию кода. Хотя бывают случаи, когда их использовать намного быстрее (надеюсь, экономно).

Я не совсем уверен, что вы собираетесь делать в своем вопросе, но я бы по крайней мере рекомендовал изменить статический класс, чтобы отображать свойство вместо поля.

public static class Particles
{
    public static List<Particles> PList { get; set; }
}

or

public static class Particles
{
    private static List<Particles> _plist;

    public static List<Particles> PList
    {
        get { return _plist; }
        set { _plist = value; }
    }
}

Таким образом вы немного инкапсулируете список. Например, вы можете проверить нулевые значения во время получения или установки.

person Jerod Houghtelling    schedule 31.07.2010
comment
Они имеют тенденцию приводить к сильному связыванию кода. Да, и что еще хуже, когда вы начинаете их использовать, они становятся скользкой дорожкой. Они чрезвычайно удобны, пока они вдруг не перестают превращаться в кошмар. В ранних версиях разработки моего DAL я спешно делал несколько своих репозиториев статическими, после того как я переключился на использование ORM, отсоединение этого кода было болезненным и долгим. Я сделал это с собой и научился на собственном горьком опыте. - person joshlrogers; 01.08.2010
comment
@ Джош Аминь! С ними слишком легко злоупотреблять, и через некоторое время вы столкнетесь с классом богов. Компания, в которой я работаю, имеет стандарт кодирования, позволяющий избегать статических методов. Мы слишком много раз переживали за их удобство. - person Jerod Houghtelling; 01.08.2010

Здесь у вас есть как минимум два варианта:

  1. Создайте свойство IList<Particles> в каждом классе, который работает с частицами.

  2. В каждом классе, который работает с частицами, создайте личное поле IList<Particles> и конструктор, который принимает такой список в качестве параметра.

Любая из этих опций сохранит инкапсуляцию списка.

person Community    schedule 31.07.2010