В настоящее время я делаю проект на C# с большим количеством рендеринга, и на протяжении почти всех классов существует постоянное значение типа integer, используемого для масштабирования рендеринга. Я знаю, что могу определить эту константу в одном месте как обычную переменную, а затем передать ее, но это кажется очень громоздким. Когда допустимо использовать статические переменные в C#? Самое простое решение моей проблемы - создать класс, содержащий статическую переменную, которую могут ссылаться все другие классы - будет ли это плохой дизайн?Когда использовать статические переменные?
ответ
Неплохой дизайн вообще. Фактически, наличие пространства имен и классов Common или Utility, которое предоставляет статические методы и статические значения, централизует эти значения в одном месте, поэтому вы можете гарантировать, что каждый модуль в вашем приложении использует соответствующие значения. Это низкая сплоченность, но приемлемая для выгоды. Я не вижу проблем с этим.
Нет, это действительно было бы идеальным кандидатом на статические переменные. Вы даже можете сделать еще один шаг и сделать класс статическим, чтобы он не мог быть создан. Затем вы можете добавить все свои константы в этот класс, а также некоторые вспомогательные методы, если это необходимо.
Ответ заключается в том, что если программа работает и поддерживается, сделайте это.
Статические переменные не являются грехом, хорошо знать, когда их использовать. :)
Как постоянная ценность? static
подходит для вещей readonly
, но вы можете быстро попасть в беспорядок, если он неreadonly
- особенно если у вас несколько потоков. Коэффициент масштабирования не звучит как жесткий постоянной ко мне - то это не так:
public const double ScaleFactor = 1;
Я не смущался бы использовать статическую переменную для чего-то я загрузить один раз и оставить в покое. Кроме этого, я бы, вероятно, инкапсулировал (в вашем случае) какой-то RenderContext
с этим значением и любыми другими методами утилиты - и передал RenderContext
между методами; это также может помочь вам абстрагироваться от базовой реализации, если вам нужно провести единичный тест и т. д.
Поскольку вам нужно больше свойств (и вы неизбежно будете), вы просто расширяете класс RenderContext
- ничего не изменится.
(редактировать)
Также - рассмотреть будущее: вы когда-нибудь делать больше, чем один делают одновременно? Так как у всех нас есть много ядер и т. Д. ... статические хорошо, если все потоки разделяют значение. Существует [ThreadStatic]
, но это немного беспорядочно по сравнению.
Если все ваши классы должны понимать это значение + делать что-то еще, то (если это не похоже на pi), вы, вероятно, должны проверить, что у ваших классов есть одна проблема. Возможно, что «ценность» должна стать объектом, который может выполнять операции, которые в настоящее время выполняются по всей вашей кодовой базе?
- 1. android: использовать статические переменные
- 2. Как эффективно использовать статические переменные?
- 3. Когда использовать статические переменные/методы и когда использовать переменные/методы экземпляра в Java?
- 4. Когда использовать статические фрагменты
- 5. Когда использовать статические атрибуты?
- 6. статические переменные как глобальные, а когда статические объекты собирают мусор?
- 7. Когда использовать статические переменные и sharedpreference в android
- 8. Android - Лучший способ использовать статические переменные/объекты
- 9. Использовать статические переменные в Laravel Фасадов
- 10. Как использовать статические переменные в моем UIViewController
- 11. Как использовать статические глобальные переменные в JAVA
- 12. , когда статические переменные уничтожаются в приложении android?
- 13. Когда инициализируются статические и глобальные переменные?
- 14. Когда инициализируются глобальные статические константные переменные?
- 15. Статические переменные Vs переменные приложения
- 16. Статические переменные и функции
- 17. Когда следует использовать статические методы?
- 18. Как использовать глобальные/статические переменные OBJ-C
- 19. Должен ли синглтон Java использовать статические переменные?
- 20. Плохо ли использовать общедоступные статические поля/переменные?
- 21. Когда использовать статические классы в PHP?
- 22. Статические переменные и методы
- 23. Публичные и статические переменные
- 24. Статические переменные в Monodroid
- 25. Python Статические переменные класса
- 26. Статические методы и переменные
- 27. Статические переменные в C#
- 28. Статические переменные в c
- 29. Статические переменные в ASP.NET
- 30. Статические переменные в Android
Единственное, что следует учитывать при использовании функции const: Когда вы перекомпилируете свой компонент и измените значение const, все модули, которые используют эту константу, также должны быть перекомпилированы для правильного значения. Это позволяет избежать использования статического readonly. – SACO