Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Видимость переменных (Delphi & C#)
|
|||
|---|---|---|---|
|
#18+
Переписываю проект с дельфи кода на с#. в дельфи коде некоторые переменные объявляются в в условиях (if else) и позже после выхода из этого условия эта переменная где то используется. Делаю так же в C# и при компиляции он начинает ругаться что переменная вне зоны видимости. Ну чисто логически я понимаю что правильно - если он не войдет в цикл то эта переменная и не создастьтся, тогда как это побороть?? В дельфи же такой оборот работает! Уже всю голову сломал от раздумий как это побороть. Может вы подскажите как решить такую проблемку? Я думал что это из-за блоков try{} т.е. если я переменную объявляю в try блоке а потом опять использую её вне его, то он её не видит... пробовал убирать try - всё равно также. Как же тогда быть? Ведь согласно правилам объявления переменных - переменную нужно объявлять в момент её первого использования? Или я что то путаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2004, 14:33 |
|
||
|
Видимость переменных (Delphi & C#)
|
|||
|---|---|---|---|
|
#18+
Путаешь. Не "нужно", а "можно", что согласись, совсем разные вещи. Например: int q; for(int i = 0; i<max; i++) { for(q = 5; q>min; q--) { if (q == t) break; } if (q == e) // Нет ошибки break; } j = i; /// Ошибка - переменная вне зоны видимости ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2004, 14:41 |
|
||
|
Видимость переменных (Delphi & C#)
|
|||
|---|---|---|---|
|
#18+
в Си-шарпе у переменных есть так называемая область видимости - при выходе из области видимости GC "съедает" переменную, поэтому ссылать на нее вне области видимости нельзя. Область видимости - очень тонкое понятие, и объяснять тут все нюансы долго, да я и сам их не знаю, но если на пальцах - то область видимости определяется фигурными скобками уровнем выше. Т.е., если вы внутри If-а(try,while, просто метод какойто) объявите переменную, то по выходу из области видимости на переменную ссылаться нельзя. Поэтому обьявляйте ее снаружи области видимости if-а , а значение присваивайте внутри. На дельфи я не пишу, но судя по тому, что вы сказали, там такого нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2004, 14:43 |
|
||
|
Видимость переменных (Delphi & C#)
|
|||
|---|---|---|---|
|
#18+
Используйте переменные-члены класса, а не локальные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2004, 14:47 |
|
||
|
Видимость переменных (Delphi & C#)
|
|||
|---|---|---|---|
|
#18+
Да это то всё понятно что вы сказали - я это и сам себе так понимаю. Тут другое - ладно бы я свой проект писал, ябы его тогда с самого начала сам проектировал и учел бы уже все нюансы C#. Но я переписываю программу с одной платформы на другую, т.е. с Дельфи на C# Т.е. мне дали исходник и я иду по строкам и перевожу на C# всё. Но вот нюанс то... ну объявлю я переменную вне цикла, а значение то ей присваивается только в цикле а если он в цикл не войдет значения не будет. но ниже в программе вне этого цикла используется формула с этой переменной. И вот каакооое ей значение там присваивать незнаю. т.к. если что то присвою, то вычисления пойдут неправильно - вот такая вот дилемма. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2004, 16:44 |
|
||
|
Видимость переменных (Delphi & C#)
|
|||
|---|---|---|---|
|
#18+
Гость из прошлогону объявлю я переменную вне цикла, а значение то ей присваивается только в цикле а если он в цикл не войдет значения не будет. но ниже в программе вне этого цикла используется формула с этой переменной. И вот каакооое ей значение там присваивать незнаю. т.к. если что то присвою, то вычисления пойдут неправильно - вот такая вот дилемма. Хмм.. А в Delphi это как решается ? Т.е. использование переменной, которая инициализируется только в цикле после этого цикла. С учетом того, что в цикл ход выполнения может и не попасть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2004, 16:52 |
|
||
|
Видимость переменных (Delphi & C#)
|
|||
|---|---|---|---|
|
#18+
дык и надо присвоить последнее значение этой переменной полученное в цикле. Можно использовать цикл do..while и переменную, соответственно объявлять вне тела цикла ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2004, 16:56 |
|
||
|
Видимость переменных (Delphi & C#)
|
|||
|---|---|---|---|
|
#18+
Alexey Kudinov Гость из прошлогону объявлю я переменную вне цикла, а значение то ей присваивается только в цикле а если он в цикл не войдет значения не будет. но ниже в программе вне этого цикла используется формула с этой переменной. И вот каакооое ей значение там присваивать незнаю. т.к. если что то присвою, то вычисления пойдут неправильно - вот такая вот дилемма. Хмм.. А в Delphi это как решается ? Т.е. использование переменной, которая инициализируется только в цикле после этого цикла. С учетом того, что в цикл ход выполнения может и не попасть. на сколько мне известно, в паскале все переменные процедуры объявляются в ее начале и инициируются с какимито значениями. 2Гость из прошлого, думаю можешь по аналогии с паскалем объявить все используемые переменные вначале тела метода, в отличии от паскаля в .нет переменные могут инициализироваться при объявлении (а в вб.нет инициализируются начальными значениями еще и не явно) Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2004, 18:12 |
|
||
|
Видимость переменных (Delphi & C#)
|
|||
|---|---|---|---|
|
#18+
char region_RegistrMy; char ClientRegionMy; if (tocheck.regionRegistr == 0 || tocheck.regionRegistr == 1) region_RegistrMy = 'M'; if (tocheck.regionRegistr == 40 || tocheck.regionRegistr == 60) region_RegistrMy = 'L'; //40-Ленинградская обл. 60-Санкт - Петербург if (parametrs.tp_region == 0 || parametrs.tp_region == 1) ClientRegionMy = 'M'; if (parametrs.tp_region == 40 || parametrs.tp_region == 60) ClientRegionMy = 'L'; if (region_RegistrMy.Equals(ClientRegionMy) == false) { опять не имеет доступа к переменным char region_RegistrMy; char ClientRegionMy; ААА что же делать!!! у меня 3000 строк кода и везде щас такая хрень про недоступностьт вылетает!!!! АААА ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2004, 11:24 |
|
||
|
Видимость переменных (Delphi & C#)
|
|||
|---|---|---|---|
|
#18+
Вот так наши ракеты с неба и падают... перепишешь программу управления полетами с 1 языка на другой и кирдык! :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2004, 12:14 |
|
||
|
Видимость переменных (Delphi & C#)
|
|||
|---|---|---|---|
|
#18+
Гость из прошлогоВот так наши ракеты с неба и падают... перепишешь программу управления полетами с 1 языка на другой и кирдык! :-) Зависит от того, кто переписывает. В этом треде вам уже все подробно и с примерами разъяснили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2004, 12:32 |
|
||
|
|

start [/forum/topic.php?fid=20&msg=32786930&tid=1437865]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
53ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 349ms |

| 0 / 0 |
