2012-04-21 1 views
3

Нет, это не моя домашняя работа.
(Потому что рядом со мной находится стопку листок ответов, ожидающий маркировки.)Переменная область в C#, Java

В: Если локальная переменная в методе имеет то же имя, что и переменная в основной программе, что произойдет?
а) ошибка генерируются
б) переменный в главной программе «скрыт» пока метод не завершит выполнение
с) переменным в основной программе будет переопределить переменную из метода
г) None из вышеперечисленных.

И ответ учебника b, довольно простой.

Но на секунду мысль, действительно ли она «скрыта»?
Насколько я знаю, в чистых объектно-ориентированных языков программирования, таких как C# и Java,
мы всегда можем использовать

this.x 

или

MainProgram.x 

для статических переменных.

Так что мой вопрос:
Может ли вариант b считаться истинным для C#? Зачем?

Пожалуйста, поделитесь своими мыслями.

+1

Вы, кажется, просто указываете, что использование разговорного программиста 'hidden' здесь не очень хорошо соответствует определению словаря? Это относится ко многим вещам. – Affe

+0

взгляните на [это] (http://en.wikipedia.org/wiki/Closure_%28computer_science%29) –

+0

Спасибо, это очень полезно. Я никогда не слышал о затенении. Я не носитель языка. – user1348001

ответ

4

Да, локальная переменная x скрывает (или более точно, тени - благодаря @pst) переменная членом x в рамках этого метода/блока. Вы можете обратиться к последнему с его квалифицированным именем как this.x, чтобы облегчить жизнь, но, тем не менее, ответ правильный. A (полностью) квалифицированное имя больше не зависит от объема, поэтому оно не может быть скрыто или затенено.

2

я отсылаю вас к разделу 3.7.1 спецификации C# 4, начало которого я привожу здесь для вашего удобства:

Объем объекта, как правило, охватывает больше текста программы, чем декларация пространства лицо. В частности, объем объекта может включать объявления, которые вводят новые пространства деклараций, содержащие объекты с тем же именем. Такие объявления приводят к тому, что исходный объект становится скрытым. И наоборот, сущность считается видна, если нет скрыто.

Правильно понимая эту часть спецификации требует, чтобы вы понимали разницу между объема хозяйствующего субъекта и его декларации пространства. Область - это область текста программы, в которой на объект может ссылаться его неквалифицированное имя. Область объявления - это область текста программы, в которой имя объекта уникально.

Прочтите остальные разделы 3.7.1.

Я также отмечаю, что указанный термин «скрыт», хотя часто используется «затененный».

+0

Документ спецификации C#, в комплекте с .NET, является удивительным источником информации, и я использовал его много раз для пролить свет на вещи, которые, казалось, бросают вызов логике. Я бы хотел, чтобы все люди читали его (без обид, предназначенных для плаката). –

Смежные вопросы