2009-10-15 2 views
2

Я видел дегты и константы раньше в коде, но когда и где подходящие времена для их использования? Какие виды использования я видел, я вижу другие способы программирования вокруг них? Может ли кто-нибудь сказать мне, какие истинные выгоды я никогда не использовал.C# Константы и делегаты

+3

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

+0

другие способы для констант: используйте значение напрямую (не так хорошо для понимания кода), другие способы для делегатов: никто из них я не знаю. – Abel

ответ

2

Делегаты являются абсолютно обязательными, если вы добавляете события в свой класс или делаете что-либо асинхронным (для делегатов есть несколько других веских причин). Преимущества в том, что это очень гибкий подход.

Константы помогают предотвратить «магические числа». Aka обеспечивают центральное место, где вы можете указать постоянные данные, которые семантически идентичны. Их преимуществом является то, что они не имеют абсолютно никакой производительности или памяти.

1

Константы должны использоваться для значений, таких как pi (3.14159 ...). С их помощью означает, что ваш код читает здраво:

double circumference = radius * 2.0 * PI; 

это также означает, что если значение постоянных изменений (явно не для пи!), То вам нужно только изменить код в одном месте.

5

Я хотел бы подчеркнуть разницу между const и readonly в C#, даже если вы не спрашиваете, это может иметь значение:

  1. A const переменная заменяется на ее буквальное значение при компиляции. Это означает, что если вы измените его значение (т. Е. Добавьте больше цифр в PI или увеличите допустимый MAX_PROCESSORS), а другие компоненты используют эту константу, они не будут видеть новое значение.
  2. A readonly переменная также не может быть изменена, но при компиляции она не заменяется ее буквальным значением. Когда вы обновите свою ссылку, другие компоненты вашего приложения сразу обнаружат это обновление и не нуждаются в повторной компиляции.

Эта разница тонкая, но очень важная, поскольку она может вводить тонкие ошибки. Урок здесь: использовать только const, когда вы абсолютно уверены, что значение никогда не изменится, используйте readonly иначе.

Делегаты являются заполнителем (план, подпись) вызова метода. Я считаю их декларацией интерфейса метода. Переменная делегата относится к типу делегата. Его можно использовать так, как если бы это был метод (но он может указывать на разные реализации одной и той же сигнатуры метода).

+3

BTW: Существует простое правило, чтобы предотвратить любую проблему, которую вы могли бы иметь с константами: ТОЛЬКО создавать частные или внутренние константы. Никогда не публично. Затем вы можете использовать их, когда захотите, и изменять их, как вам нравится. Но для общественных констант вы правы. Они действительно НИКОГДА не должны меняться. – Foxfire

+0

+1 Это действительно правильное правило, есть исключения, но они редки и быстро переходят в сферы более неясных методов отражения, где разница между внутренним const и внутренним readonly получает другое измерение. – Abel

1

Делегаты: http://www.akadia.com/services/dotnet_delegates_and_events.html

Константы: Есть два типа констант, доступных в C#: Compile-временные константы и константы во время выполнения. У них разное поведение, а , используя неправильный, будет стоить вам производительности или правильности. , поэтому выберите правильный постоянный тип, который вы используете для своего проекта ..

http://dotnetacademy.blogspot.com/2011/09/constants-in-net.html

Смежные вопросы