powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Видимость переменных (Delphi & C#)
11 сообщений из 11, страница 1 из 1
Видимость переменных (Delphi & C#)
    #32786863
Переписываю проект с дельфи кода на с#.
в дельфи коде некоторые переменные объявляются в в условиях (if else)
и позже после выхода из этого условия эта переменная где то используется.

Делаю так же в C# и при компиляции он начинает ругаться что переменная вне зоны видимости.

Ну чисто логически я понимаю что правильно - если он не войдет в цикл то эта переменная и не создастьтся, тогда как это побороть?? В дельфи же такой оборот работает!

Уже всю голову сломал от раздумий как это побороть. Может вы подскажите как решить такую проблемку?

Я думал что это из-за блоков try{}
т.е. если я переменную объявляю в try блоке
а потом опять использую её вне его, то он её не видит...
пробовал убирать try - всё равно также. Как же тогда быть?

Ведь согласно правилам объявления переменных - переменную нужно объявлять в момент её первого использования?

Или я что то путаю?
...
Рейтинг: 0 / 0
Видимость переменных (Delphi & C#)
    #32786905
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Путаешь.

Не "нужно", а "можно", что согласись, совсем разные вещи.

Например:

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; /// Ошибка - переменная вне зоны видимости
...
Рейтинг: 0 / 0
Видимость переменных (Delphi & C#)
    #32786909
Misha 'Karn' Ivanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в Си-шарпе у переменных есть так называемая область видимости - при выходе из области видимости GC "съедает" переменную, поэтому ссылать на нее вне области видимости нельзя. Область видимости - очень тонкое понятие, и объяснять тут все нюансы долго, да я и сам их не знаю, но если на пальцах - то область видимости определяется фигурными скобками уровнем выше. Т.е., если вы внутри If-а(try,while, просто метод какойто)
объявите переменную, то по выходу из области видимости на переменную ссылаться нельзя. Поэтому обьявляйте ее снаружи области видимости if-а , а значение присваивайте внутри. На дельфи я не пишу, но судя по тому, что вы сказали, там такого нет.
...
Рейтинг: 0 / 0
Видимость переменных (Delphi & C#)
    #32786930
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используйте переменные-члены класса, а не локальные.
...
Рейтинг: 0 / 0
Видимость переменных (Delphi & C#)
    #32787405
Да это то всё понятно что вы сказали - я это и сам себе так понимаю.
Тут другое - ладно бы я свой проект писал, ябы его тогда с самого начала сам проектировал и учел бы уже все нюансы C#. Но я переписываю программу с одной платформы на другую, т.е. с Дельфи на C#
Т.е. мне дали исходник и я иду по строкам и перевожу на C# всё.
Но вот нюанс то... ну объявлю я переменную вне цикла, а значение то ей присваивается только в цикле а если он в цикл не войдет значения не будет. но ниже в программе вне этого цикла используется формула с этой переменной. И вот каакооое ей значение там присваивать незнаю.
т.к. если что то присвою, то вычисления пойдут неправильно - вот такая вот дилемма.
...
Рейтинг: 0 / 0
Видимость переменных (Delphi & C#)
    #32787434
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость из прошлогону объявлю я переменную вне цикла, а значение то ей присваивается только в цикле а если он в цикл не войдет значения не будет. но ниже в программе вне этого цикла используется формула с этой переменной. И вот каакооое ей значение там присваивать незнаю.
т.к. если что то присвою, то вычисления пойдут неправильно - вот такая вот дилемма. Хмм.. А в Delphi это как решается ?
Т.е. использование переменной, которая инициализируется только в цикле после этого цикла. С учетом того, что в цикл ход выполнения может и не попасть.
...
Рейтинг: 0 / 0
Видимость переменных (Delphi & C#)
    #32787442
Фотография profil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дык и надо присвоить последнее значение этой переменной полученное в цикле.
Можно использовать цикл do..while и переменную, соответственно объявлять вне тела цикла
...
Рейтинг: 0 / 0
Видимость переменных (Delphi & C#)
    #32787626
Фотография Лиман Артём
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Kudinov Гость из прошлогону объявлю я переменную вне цикла, а значение то ей присваивается только в цикле а если он в цикл не войдет значения не будет. но ниже в программе вне этого цикла используется формула с этой переменной. И вот каакооое ей значение там присваивать незнаю.
т.к. если что то присвою, то вычисления пойдут неправильно - вот такая вот дилемма. Хмм.. А в Delphi это как решается ?
Т.е. использование переменной, которая инициализируется только в цикле после этого цикла. С учетом того, что в цикл ход выполнения может и не попасть.

на сколько мне известно, в паскале все переменные процедуры объявляются в ее начале и инициируются с какимито значениями.

2Гость из прошлого, думаю можешь по аналогии с паскалем объявить все используемые переменные вначале тела метода, в отличии от паскаля в .нет переменные могут инициализироваться при объявлении (а в вб.нет инициализируются начальными значениями еще и не явно)

Код: plaintext
1.
2.
3.
4.
5.
6.
 void Test()
{
 Double d  = 0;
 if ( 1 == 2) d = 34;
 Double res = d + 23;
}
такое не катит:

Код: plaintext
1.
2.
3.
4.
5.
6.
 void Test()
{
 Double d;
 if ( 1 == 2) d = 34;
 Double res = d + 23; //компилятор не пропустит!
}
а вот васике всё ок
Код: plaintext
1.
2.
3.
4.
5.
6.
sub Test()
 dim d as Double //переменная инициализировалась  0 
 if  1 = 2  then d =  7 
 dim res as Double = d + 1  //все ОК
 
end sub
...
Рейтинг: 0 / 0
Видимость переменных (Delphi & C#)
    #32788622
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 строк кода и везде щас такая хрень про недоступностьт вылетает!!!! АААА
...
Рейтинг: 0 / 0
Видимость переменных (Delphi & C#)
    #32788814
Вот так наши ракеты с неба и падают... перепишешь программу управления полетами с 1 языка на другой и кирдык! :-)
...
Рейтинг: 0 / 0
Видимость переменных (Delphi & C#)
    #32788878
Один
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость из прошлогоВот так наши ракеты с неба и падают... перепишешь программу управления полетами с 1 языка на другой и кирдык! :-) Зависит от того, кто переписывает.
В этом треде вам уже все подробно и с примерами разъяснили.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Видимость переменных (Delphi & C#)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]