![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
4ybaka |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 28.4.2007 Репутация: нет Всего: нет |
есть такое объявление:
но компилятор не дает такого сотворить,говорит:
всвязи с чем возникли 3 вопроса: 1)почему он считает что это не константа?из-за того что определяется значением функции? 2)как это можно обойти(оставив const)? 3)в чем вообще преимущества определения как const?может не стоит заморачиваться по этому поводу... -------------------- "То,что вы понимаете - это все,что вы понимаете." Брайн Керниган |
||||
|
|||||
tol05 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
а почему он должен считать, что это константа? Компилятор просто проверяет сигнатуру метода на ее наличие в указанном типе и, если такая есть, то на ее соответствие указанной в типе. Но никакой предкомпиляции, никаких предположений на неизменность ее функционирования он не делает. Это ты знаешь, что результат выполнения этой ф-ции - константа, а он - нет... а зачем именно const? Неизменность можно гарантировать, используя readonly. Или создав к закрытому полю открытое свойство только для чтения.
на этапе компиляции компилятор подставит во все места использования G ее значение. G вообще не будет в коде... Преймущество перед readonly - в быстроте работы программы. Readonly вычисляется каждый раз при компиляции программы JIT-ом. Недостаток - значение захардкодано в откомпилированном коде после компиляции csc. Чтобы изменить это значение, нужно перекомпилировать все сборки, используюшие G. -------------------- На хорошей работе и сны хорошие снятся. |
||||
|
|||||
Bogdan1024 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1436 Регистрация: 28.9.2005 Где: Киев Репутация: 5 Всего: 13 |
Для того чтобы записывать такие числа существует экспоненциальная ("инженерная") форма представления числа:
Кстати, работает не только в C#, но и во многих других языках. -------------------- ![]() |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |