Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> const double - проблема с объявлением 
V
    Опции темы
4ybaka
Дата 27.10.2007, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 28.4.2007

Репутация: нет
Всего: нет



есть такое объявление:
Код

public const double G = 6.6742 * Math.Pow(10,-20);

но компилятор не дает такого сотворить,говорит:
Цитата

The expression being assigned to 'Space.Constants.G' must be constant

всвязи с чем возникли 3 вопроса:
1)почему он считает что это не константа?из-за того что определяется значением функции?
2)как это можно обойти(оставив const)?
3)в чем вообще преимущества определения как const?может не стоит заморачиваться по этому поводу...


--------------------
"То,что вы понимаете - это все,что вы понимаете."
 Брайн Керниган
PM MAIL WWW   Вверх
tol05
Дата 27.10.2007, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



Цитата(4ybaka @  27.10.2007,  17:29 Найти цитируемый пост)
почему он считает что это не константа?из-за того что определяется значением функции?

а почему он должен считать, что это константа? Компилятор просто проверяет сигнатуру метода на ее наличие в указанном типе и, если такая есть, то на ее соответствие указанной в типе. Но никакой предкомпиляции, никаких предположений на неизменность ее функционирования он не делает. Это ты знаешь, что результат выполнения этой ф-ции -  константа, а он - нет...


Цитата(4ybaka @  27.10.2007,  17:29 Найти цитируемый пост)
как это можно обойти(оставив const)?

а зачем именно const? Неизменность можно гарантировать, используя readonly. Или создав к закрытому полю открытое свойство только для чтения.


Цитата(4ybaka @  27.10.2007,  17:29 Найти цитируемый пост)
в чем вообще преимущества определения как const?может не стоит заморачиваться по этому поводу... 

на этапе компиляции компилятор подставит во все места использования G ее значение. G вообще не будет в коде...
Преймущество перед readonly - в быстроте работы программы. Readonly вычисляется каждый раз при компиляции программы JIT-ом. Недостаток - значение захардкодано в откомпилированном коде после компиляции csc. 
Чтобы изменить это значение, нужно перекомпилировать все сборки, используюшие G.


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Bogdan1024
Дата 27.10.2007, 18:32 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: 5
Всего: 13



Для того чтобы записывать такие числа существует экспоненциальная ("инженерная") форма представления числа:
Код

const double d = 6.674 * 1E-20d;

Кстати, работает не только в C#, но и во многих других языках.


--------------------
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1001 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.