Я видел дегты и константы раньше в коде, но когда и где подходящие времена для их использования? Какие виды использования я видел, я вижу другие способы программирования вокруг них? Может ли кто-нибудь сказать мне, какие истинные выгоды я никогда не использовал.C# Константы и делегаты
ответ
Делегаты являются абсолютно обязательными, если вы добавляете события в свой класс или делаете что-либо асинхронным (для делегатов есть несколько других веских причин). Преимущества в том, что это очень гибкий подход.
Константы помогают предотвратить «магические числа». Aka обеспечивают центральное место, где вы можете указать постоянные данные, которые семантически идентичны. Их преимуществом является то, что они не имеют абсолютно никакой производительности или памяти.
Константы должны использоваться для значений, таких как pi (3.14159 ...). С их помощью означает, что ваш код читает здраво:
double circumference = radius * 2.0 * PI;
это также означает, что если значение постоянных изменений (явно не для пи!), То вам нужно только изменить код в одном месте.
Я хотел бы подчеркнуть разницу между const
и readonly
в C#, даже если вы не спрашиваете, это может иметь значение:
- A
const
переменная заменяется на ее буквальное значение при компиляции. Это означает, что если вы измените его значение (т. Е. Добавьте больше цифр вPI
или увеличите допустимыйMAX_PROCESSORS
), а другие компоненты используют эту константу, они не будут видеть новое значение. - A
readonly
переменная также не может быть изменена, но при компиляции она не заменяется ее буквальным значением. Когда вы обновите свою ссылку, другие компоненты вашего приложения сразу обнаружат это обновление и не нуждаются в повторной компиляции.
Эта разница тонкая, но очень важная, поскольку она может вводить тонкие ошибки. Урок здесь: использовать только const
, когда вы абсолютно уверены, что значение никогда не изменится, используйте readonly
иначе.
Делегаты являются заполнителем (план, подпись) вызова метода. Я считаю их декларацией интерфейса метода. Переменная делегата относится к типу делегата. Его можно использовать так, как если бы это был метод (но он может указывать на разные реализации одной и той же сигнатуры метода).
BTW: Существует простое правило, чтобы предотвратить любую проблему, которую вы могли бы иметь с константами: ТОЛЬКО создавать частные или внутренние константы. Никогда не публично. Затем вы можете использовать их, когда захотите, и изменять их, как вам нравится. Но для общественных констант вы правы. Они действительно НИКОГДА не должны меняться. – Foxfire
+1 Это действительно правильное правило, есть исключения, но они редки и быстро переходят в сферы более неясных методов отражения, где разница между внутренним const и внутренним readonly получает другое измерение. – Abel
Делегаты: http://www.akadia.com/services/dotnet_delegates_and_events.html
Константы: Есть два типа констант, доступных в C#: Compile-временные константы и константы во время выполнения. У них разное поведение, а , используя неправильный, будет стоить вам производительности или правильности. , поэтому выберите правильный постоянный тип, который вы используете для своего проекта ..
http://dotnetacademy.blogspot.com/2011/09/constants-in-net.html
- 1. C# - Делегаты и события
- 2. C#: Делегаты и dynamicInvoke
- 3. Простые делегаты (делегаты) и делегаты многоадресной передачи
- 4. C# Делегаты и метод подписи
- 5. События и делегаты в C#
- 6. События и делегаты MouseHandler C#
- 7. Задачи C делегаты и протоколы
- 8. C# Интерфейсы, полиморфизм и делегаты
- 9. Обозначение константы константы C++
- 10. C# Делегаты и события Дизайн и архитектура
- 11. C# .NET Делегаты
- 12. Быстрые делегаты C++
- 13. C#: Наследование @ Делегаты
- 14. Элемент константы-константы класса C++
- 15. C# делегаты скрываются
- 16. анонимные делегаты в C#
- 17. Десятичные делегаты C++
- 18. Стандартные делегаты в C#
- 19. Общие делегаты, C# 3.5
- 20. Делегаты в объекте c
- 21. Делегаты в C#
- 22. Зачем нам делегаты C#
- 23. C# Вопрос: Делегаты
- 24. C#: Делегаты - Java: ActionListener
- 25. Делегаты-предикаты в C#
- 26. Делегаты и делегаты многоадресной передачи в VB.NET
- 27. Статические делегаты и переопределение
- 28. Делегаты и указатели функций
- 29. C# конструктор и константы mystery
- 30. Константы инициализации C++ и наследование
Может быть стоит спросить о делегатов и постоянных отдельно. Трудно ответить, потому что они несколько независимые. – Chris
другие способы для констант: используйте значение напрямую (не так хорошо для понимания кода), другие способы для делегатов: никто из них я не знаю. – Abel