рпар. Ввод вывод в визуальных средах (4). Система типов языка С#
Скачать 4.42 Mb.
|
Система типов языка С#С# - строго типизированный язык Типы данных C# Типы значений (содержат данные). Для данных типов значений память отводится в момент их объявления и такие данные называют статическими. Примеры: целочисленные типы (byte, sbyte, short, ushort, int, uint, long, ulong), типы с плавающей запятой (float, double), тип decimal, тип bool, тип char, перечисления enum, структуры (struct) Ссылочные типы (хранят адреса ячеек памяти, в которых размещены соответствующие данные). Для данных, на которые ссылаются переменные ссылочных типов, память выделяется по специальным запросам уже в процессе выполнения программы. Такие данные называются динамическими. Примеры: тип object, тип string, классы (class), интерфейсы (interface), делегаты (delegate) Типы значений и ссылочные типы С#В чем же между ними различия? Для этого надо понять организацию памяти в .NET. Здесь память делится на два типа: стек и куча (heap). Параметры и переменные метода, которые представляют типы значений, размещают свое значение в стеке. Стек представляет собой структуру данных, которая растет снизу вверх: каждый новый добавляемый элемент помещается поверх предыдущего. Время жизни переменных таких типов ограничено их контекстом. Физически стек - это некоторая область памяти в адресном пространстве. При создании объекта ссылочного типа в стеке помещается ссылка на адрес в куче (хипе). Когда объект ссылочного типа перестает использоваться, в дело вступает автоматический сборщик мусора: он видит, что на объект в хипе нет больше ссылок, условно удаляет этот объект и очищает память - фактически помечает, что данный сегмент памяти может быть использован для хранения других данных. Операции преобразования данных строкового типаСтроковый тип данных играет особую роль в языках программирования в силу большого значения текстовой информации для человека. В частности, именно строки участвуют в операциях ввода и вывода данных. В то же время к строкам неприменимы операции неявного преобразования типов. Пример: По этой причине рассмотрим только явные операции преобразования типов с участием строковых данных: Метод ToString() <имя_переменной>.ToString(); Метод Parse() <имя_типа>.Parse(<строка>); int i; i = "Hello"; // error CS0029: Cannot implicitly convert type 'string' to 'int' Пример: int a = int.Parse("10"); a.ToString(); Класс System.ConvertКласс Convert представляет еще один способ для преобразования значений. Для этого в нем определены следующие статические методы: ToBoolean(value) ToByte(value) ToChar(value) ToDateTime(value) ToDecimal(value) ToDouble(value) ToInt16(value) ToInt32(value) ToInt64(value) ToSByte(value) ToSingle(value) ToUInt16(value) ToUInt32(value) ToUInt64(value) Пример: int a = Convert.ToInt32("10"); B C# методы преобразования строк в числа учитывают региональные настройки Windows, в которых в качестве десятичной точки используется символ запятой (например, «15,7»). Поэтому в полях textBox в формах следует вводить дробные числа с запятой, а не с точкой. В противном случае преобразование не выполнится, а программа остановится с ошибкой. Организация ввода данных в визуальных средах Для ввода данных чаще всего используют элемент управления TextBox, через обращение к его свойству Text. Свойство Text хранит в себе строку введенных символов. Поэтому данные можно считать таким образом: private void button1_Click(object sender, EventArgs e) { string s = textBox1.Text; int a = int.Parse(s); int b = a * a; } Элементы управления HScrollBar, TrackBar и NumericUpDownHScrollBar (полоса прокрутки) представляет стандартную горизонтальную полосу прокрутки Windows TrackBar (ползунок) возвращает или задает численное значение, представляющее текущее положение ползунка на полосе NumericUpDown (счетчик) возвращает или задает значение, назначенное регулятору (также известному как элемент управления "вверх-вниз") Организация вывода данных в визуальных средах Программа может вывести результат своей работы в: Метке (компонент Label c использованием свойства Text), Текстовом поле (компонент TextBox с использованием свойства Text), Окне сообщения Вывод данных в поле редактирования
{ string s = textBox1.Text; int a = int.Parse(s); int b = a * a; textBox1.Text = b.ToString(); label1.Text = b.ToString(); } Вывод данных в окно сообщений Окна сообщений используются для привлечения внимания пользователя. При помощи окна сообщения программа может, к примеру, проинформировать об ошибке в исходных данных или запросить подтверждение выполнения необратимой операции, например, удаления файла. Формат: MessageBox.Show("Текст сообщения", "Заголовок сообщения", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); Пример: MessageBox.Show("Правильных ответов: " + k, "Ваш результат", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); Диалоговое окно MessageBox – стандартное диалоговое окно, которое предоставляет пользователям сведения о состоянии приложения . Окна сообщений также используются для запроса сведений у пользователей.
MessageBoxIcon задает константы, определяющие отображаемые сведения: 1. MessageBoxIcon.Error3. MessageBoxIcon.None 2. MessageBoxIcon.Information4.MessageBoxIcon.Question 5. MessageBoxIcon.Warning Пример. Разработать проект-приложение построения таблицы значений функции y=lg(5x+1)*cos(x) на отрезке [a, b] с шагом h. Значения исходных данных задавать с помощью элементов: значение а - HScrollBar (полоса прокрутки) значение b - TrackBar (ползунок) значение шага табулирования h – NumericUpDown (счетчик). Таблицу значений функции выводить в элемент TextBox. Результат выводить с двумя знаками после запятой. Форма в режиме конструированияLabel 1 Label 2 Label 3 Button 1 TextBox 1 hScrollBar 1 trackBar 1 numericUpDown 1 Label 4 Label 5 Создадим программный код – обработчик события нажатия на кнопку «построить таблицу»double a, b; private void hScrollBar1_Scroll(object sender, ScrollEventArgs e) { label4.Text = hScrollBar1.Value.ToString(); a = hScrollBar1.Value; } private void trackBar1_Scroll(object sender, EventArgs e) { label5.Text = trackBar1.Value.ToString(); b = trackBar1.Value; } private void button1_Click(object sender, EventArgs e) { double h = Convert.ToDouble(numericUpDown1.Value); for (double x = a; x <= b; x += h) { double f = Math.Log(5 * x + 1)*x*x; textBox1.Text += "X=" + x.ToString("0") + "; Y=" + f.ToString("0.00") + Environment.NewLine; } } Форма после запуска |