Can't Code for Sure Ответов: 2

Область действия переменных в языке Си#


Привет, Новичок спрашивает:

1) в чем разница между объявлением переменной вне любого {} за пределами самых верхних?

и

2) объявление переменной внутри {}, но маркировка ее как публичной?

Например:

класс MyApplication // Вариант 1
{
int variableInQuestion = 0;
}

против

класс MyApplication // Вариант 2
{
общественного недействительными метод mymethod()
{
int variableInQuestion= 0;
}
}

Из того, что я понимаю, не упоминая модификатор доступа, переменная получает минимально возможную область действия. Но я предполагаю, что это переопределяется модификатором доступа "public". Неверно?

Если эти два примера не эквивалентны, то в чем разница между ними?

Спасибо

Что я уже пробовал:

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

[no name]

В примере 1, int variableInQuestion является членом класса/переменной.
В примере 2, int variableInQuestion является локальной переменной типа MyMethod и поэтому виден только в MyMethod

Can't Code for Sure

Хорошо, спасибо, так что модификатор доступа не делает его видимым за пределами локального метода.

[no name]

Я не понимаю, что ты имеешь в виду. Кстати, я забыл упомянуть, что в примере 1, variableInQuestionвиден для всех методов class MyApplication

[Правка] думаю, теперь я понял, в чем дело.
Модификатор доступа в примере 2 относится только к методу, но не к локальным переменным самого метода.

Can't Code for Sure

Спасибо снова. Я предположил, что обнародование его имело тот же эффект, что и объявление его наверху.

[no name]

Добро пожаловать. Подождите несколько минут, я уверен, что некоторые члены здесь дадут вам более полный ответ... Я надеюсь... :)

Can't Code for Sure

Черт возьми, я допустил ошибку :( я хотел сказать, например 2:

класс MyApplication // Вариант 2
{
общественный метод mymethod
{
public int VariableInQuestion = 0;
}
}

[no name]

Это даже не будет компилироваться я думаю :-)

[Редактировать]
Кстати: если вы используете кнопку "ответить" локально для сообщения, отправитель сообщения будет проинформирован об этом.

Can't Code for Sure

Это все решает. Я идиотка.

Хорошего дня.

[no name]

"...Я идиот", пожалуйста, не надо! Делать ошибки не так уж плохо и обычно помогает учиться :-)

2 Ответов

Рейтинг:
4

JustWatchLittle

См.также комментарии к этому вопросу. Поставьте это как ответ, чтобы удалить его из неотвеченного Qs.

Пример 1:
int variableInQuestion является (частным) членом класса/переменной, видимой для всех методов class MyApplication

Пример 2:
int variableInQuestion является локальной переменной MyMethod и поэтому видна только в MyMethod


Can't Code for Sure

Извините, я не так понял. Вот видишь, я все-таки идиот. Теперь лучше?

[no name]

Ты же не идиот! То же самое происходит и со мной, когда я впервые использую этот форум. Да, теперь лучше, и я очень благодарен вам за то, что вы согласились.
С уважением

Can't Code for Sure

Я благодарен за помощь

[no name]

И кстати: "Соренкельструп" был/есть гораздо лучше, чем "не могу точно кодировать" ;)

Can't Code for Sure

Ой, не мой счастливый день... Я чувствовал, что мне нужно получить псевдоним из-за моих неловких действий наверху. Может быть, когда-нибудь я буду смеяться над этим :)

Я думаю, это действительно здорово, что можно так быстро получить помощь.

[no name]

Опять же: используйте кнопку "ответить" сообщения в будущем, а не самую верхнюю ... :смеяться:

"Я думаю, что это действительно здорово, что можно получить помощь так быстро". это зависит от дня в день, а также от настроения добровольцев на самом деле онлайн ;)

Can't Code for Sure

Все еще учусь - и благодарю. "Ответ" едва виден на моем экране, но теперь мне удалось его найти. Это позволит вам вернуться к более важным вопросам.

[no name]

На этот раз ты выбрал правильный путь ;)

Рейтинг:
14

CPallini

А что насчет 'документация[^]'?


[no name]

Иногда тяжелая и, как правило, скучно :-)