Известно, что статика не привязана к объекту (экземпляру), а хранится в типе объекта (!), и соответственна эта статика (в виде полей/методов и т.д.), будет существовать в едином экземпляре для всех созданных объектов типа.
Другими словами, все созданные объекты !статического класса будут ссылаться на единственную версию этих статических методов/полей.
На фоне этого, возникает вопрос, а как лучше всего использовать статику, ведь объекты с модификатором static не подлежат сборке мусора, т.к. хранятся в типе объекта (который в свою очередь связан с доменом приложения, и будет существовать до конца жизненного цикла приложения).
Стоит ли избегать статические коллекции/массивы, которые работают с большим кол-вом данных (или же стоит, но нужно будет их "чистить вручную")?
Что является дурным тонном по использованию статики?
Или же можно использовать статику в таком же количестве, как и экземплярные варианты?
Ответ
Я думаю, что стоит руководствоваться не «физическими» особенностями хранения, а семантикой, смыслом ваших данных.
Если у вас какой-либо метод или данные относится ко всем экземплярам класса, то этот метод/данные следует объявлять статическими. Если же у вас, например, экземпляр существует в единственном числе в системе, то следует объявлять его синглтоном.
Это должно быть главным соображением, влияющим на то, как именно вы объявляете ваши данные. Если в вашей программе по её смыслу данные являются статическими, объявляйте их статическими. Если они по своей сути являются экземпляром, объявляйте их данными экземпляра.
Пример: цвет автомашины, выпускаемой концерном Генри Форда — чёрный. Значит, это статические данные:
class FordCar
{
public static readonly Color = Colors.Black;
}
В моей компании есть на текущий момент только одна машина. Но это всё равно конкретный экземпляр. Значит, это синглтон
class OurCompanyCar
{
private OurCompanyCar() { }
public static OurCompanyCar() Instance { get { return lazy.Value; } }
private static readonly Lazy
Комментариев нет:
Отправить комментарий