Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.09.2012, 11:11   #1
winhttp
Пользователь
 
Регистрация: 29.07.2012
Сообщений: 98
По умолчанию Глобальная переменная

Код:
public partial class MainForm : Form
	{
		public MainForm()
		{
			//
			// The InitializeComponent() call is required for Windows Forms designer support.
			//
			InitializeComponent();
			
			//
			// TODO: Add constructor code after the InitializeComponent() call.
			//
		}
		
		void Button1Click(object sender, EventArgs e)
		{
			String oo = textBox1.Text;
		}
		
		void Button2Click(object sender, EventArgs e)
		{
			textBox2.Text=oo;
		}
	}
Где её обьявлять? и читал, что не рекомендуют переменные глобальные делать. почему? как можно по другому задачу выполнить ту, что в коде?
winhttp вне форума Ответить с цитированием
Старый 10.09.2012, 11:22   #2
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 534
По умолчанию

Код:
public partial class MainForm : Form
	{
                    private String oo;

		public MainForm()
		{
			//
			// The InitializeComponent() call is required for Windows Forms designer support.
			//
			InitializeComponent();
			
			//
			// TODO: Add constructor code after the InitializeComponent() call.
			//
		}
		
		void Button1Click(object sender, EventArgs e)
		{
			 oo = textBox1.Text;
		}
		
		void Button2Click(object sender, EventArgs e)
		{
			textBox2.Text=oo;
		}
	}
m0nax вне форума Ответить с цитированием
Старый 10.09.2012, 11:38   #3
winhttp
Пользователь
 
Регистрация: 29.07.2012
Сообщений: 98
По умолчанию

ок, спс, посоветуйте справку по классам где скачать можно на комп. использую SharpDevelop
winhttp вне форума Ответить с цитированием
Старый 10.09.2012, 13:44   #4
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию

private String oo, помещенная в класс вне методов, еще не является глобальной. Так она имеет видимость только в пределах данного класса, но зато видна во всех его методах. Вот если бы она была public или public static - в первом случае она вызывалась бы через объект (экземпляр) класса, во втором случае вызывалась бы так: MainForm.oo ,- то она была бы доступна из других классов и могла бы называться глобальной.
Не советуют делать специальный класс, содержащий только глобальные переменные, т.к. в каждом классе они непременно будут появляться при разработке программы, и там их размещать логичнее, да и найти проще по принадлежности (не просто oo, а MaiForm.oo). Еще одна причина - глобальные переменные присутствуют в памяти все время сессии и занимают ее, даже когда не используются. Во многих случаях вместо public можно обойтись локальными переменными методов и переменными private, internal или protected, жизненный цикл которых короче, и передавать эти переменные в методы других классов параметрами. Но совсем без public переменных и методов вряд ли кому-то удается обойтись, т.к. полно случаев, когда переменная должна быть одновременно видна из нескольких объектов, которые могут ее изменять и использовать.
Почитать, конечно, нужно, хотя бы по своему средству разработки, но лучше сначала почитать про язык C# как таковой. Литература в продаже есть. Можно найти источники и в инете - но это хуже, на мой взгляд, чем иметь под рукой книжку хотя бы первые несколько месяцев.
Как говорил мой первый руководитель бригады: "Не горюй, трудно только первые 25 лет". Правда, первые 25 лет давно прошли, но легче не стало, наоборот.

Последний раз редактировалось Гаврилов; 10.09.2012 в 14:36. Причина: грамматика
Гаврилов вне форума Ответить с цитированием
Старый 10.09.2012, 15:19   #5
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Все дело в том, что C# не поддерживает глобальные переменные...Поэтому не стоит путать человека... Подробнее тут
public и public static - поля класса, а не глобальные переменные...
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 10.09.2012, 18:16   #6
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию

Вот уж, действительно, spamer.
До Вашего выступления человеку все было ясно, а теперь Вы его, начинающего, действительно запутали.
Во-первых, по приведенной Вами ссылке нигде не говорится, что глобальных переменных C# не поддерживает, и не случайно, потому что такое заявление было бы неправильным. (Так что, Вы напрасно отнимаете у всех нас время!)
Во-вторых, в документации MSDN применяется понятие "уровни доступности", для public это "неограниченный доступ". Скажите пожалуйста, чем слово "неограниченный" отличается от "глобальный"? Все программеры от сотворения мира называют глобальными переменные (и не только переменные), видимость которых - всё приложение или модуль. Именно это только и нужно было человеку пояснить, да показать, как это устроить в коде.
Да, действительно, когда появились такие понятия, как "пространство имен", а в одном "решении" стало можно держать более одного проекта, одного модификатора доступа public для "глобальности" стало недостаточно, и старое доброе понятие "глобальные переменные" можно стало применять только с оговорками, глобальные они в области ли видимости класса, пространства ли имен или приложения. Однако на практике все применяют по привычке слово "глобальная переменная", и без оговорок, потому что не все такие буквоеды.
Но зачем все это знать новичку с самого начала, если он уже и так знает традиционное понятие "глобальная переменная"? Потом сам бы дошел до остального. Иначе ему сейчас надо на минуточку объяснить чуть ли не полкурса программирования в С#.
Ох уж мне эти знатоки! Лишь бы блеснуть.
Гаврилов вне форума Ответить с цитированием
Старый 10.09.2012, 19:57   #7
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Для "знатоков", подобных Гаврилов (который, скорее всего, поленился перейти по ссылке), цитирую msdn:
Цитата:
Все методы, поля, константы, свойства и события должны быть объявлены внутри типа; они называются членами класса или структуры. В C# не существует глобальных переменных или методов, как в некоторых других языках. Даже точка входа программы, метод Main, должен быть объявлен внутри класса или структуры.
Далее, читая Шилдта, можно заметить, что он упоминает о static полях класса как о глобальных переменных, отчасти можно и так считать, но тем не менее это не является верным утверждением...

Цитата:
До Вашего выступления человеку все было ясно, а теперь Вы его, начинающего, действительно запутали.
До моего поста, кое-кто (не будем тыкать пальцем) ТС ввел в заблуждение...

Цитата:
Во-вторых, в документации MSDN применяется понятие "уровни доступности", для public это "неограниченный доступ". Скажите пожалуйста, чем слово "неограниченный" отличается от "глобальный"? Все программеры от сотворения мира называют глобальными переменные (и не только переменные), видимость которых - всё приложение или модуль.
Да вы что, серьезно? А ничего, что уровни доступа относятся к классам?
Советую почитать теорию...
Будь проще и люди к тебе потянутся

Последний раз редактировалось spamer; 10.09.2012 в 19:59.
spamer вне форума Ответить с цитированием
Старый 10.09.2012, 20:04   #8
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию

Будьте проще, спамер!
Гаврилов вне форума Ответить с цитированием
Старый 10.09.2012, 20:09   #9
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Гаврилов, троль что ли?
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 10.09.2012, 20:12   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Да вы что, серьезно? А ничего, что уровни доступа относятся к классам?
и к поле тоже, но уровень доступа класса может ограничить уровень доступа полей.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Глобальная переменная = 0 в Worksheet_SelectionChange smbd Microsoft Office Excel 8 14.03.2011 15:03
Глобальная переменная mutabor JavaScript, Ajax 2 31.12.2010 12:23
C++ [Глобальная переменная] Lemo Помощь студентам 2 26.10.2009 17:49
Глобальная переменная для одной формы bcb 2k9 xLoMMx Общие вопросы C/C++ 2 16.09.2009 22:20
Глобальная переменная в проектном файле. Nikolaeva Общие вопросы Delphi 8 23.04.2009 12:31