Явное и неявное преобразование данных.
Маран М.М.
Программирование на языке C#. Методическое пособие по курсу «Программирование на языках высокого уровня». – М.: Издательство МГТУ «СТАНКИН», 2007. – 94 с.
Учебное пособие содержит описание языка программирования C#, рассмотрены основные конструкции, методики процедурного и объектно-ориентированного программирования. Во второй части пособия приведены основные сведения о работе в среде Microsoft Visual Studio 2005 и описано создание одно- и многооконных интерфейсов пользователя.
Предназначено для студентов, обучающихся по направлению «Информатика и вычислительная техника».
© М.М.Маран, 2007
© Московский государственный технологический университет
«СТАНКИН», 2007
Оглавление
Введение.. 6
1 . Базовые элементы языка C#. 7
1.1. Структура программы.. 7
1.2. Типы данных. 8
1.3. Арифметические и логические операции. 10
1.4. Условный оператор и оператор выбора. 11
1.5. Ввод/вывод в консольном режиме. 12
1.6. Комментарии. 14
1.7. Массивы.. 14
1.8. Операторы цикла. 16
1.9. Работа со ступенчатыми массивами. 18
Контрольные вопросы... 19
2. Работа с функциями.. 20
2.1. Общие принципы.. 20
2.2. Процедурное программирование в C#. 21
Контрольные вопросы... 24
3. Объектно-ориентированное программирование на C# 25
3.1. Общие принципы.. 25
3.2. Объявление и работа с классами. 25
3.3. Перегрузка операторов. 28
3.4. Индексаторы.. 31
3.5. Свойства. 34
3.6. Использование класса в качестве типа данных. 36
3.7. Работа со структурами. 39
3.8. Наследование. 41
3.9. Ссылки на объекты.. 43
3.10. Конструктор копирования. 44
3.11. Виртуальные методы.. 46
3.12. Абстрактные методы и классы.. 48
3.13. Интерфейсы.. 49
3.14. Делегаты и события. 51
3.15. Исключительные ситуации. 58
Контрольные вопросы... 61
4. Среда Microsoft Visual Studio 2005. 61
4.1. Простейший пример. 61
4.2. Средства управления работой программы.. 62
4.3. Создание меню.. 63
4.4. Ввод/вывод массивов. 64
4.4.1. Ввод/вывод и обработка одномерного массива-строки. 65
4.4.2. Ввод/вывод и обработка одномерного массива-столбца. 66
4.4.3. Ввод/вывод и обработка двумерного массива. 67
4.4.4. Форматированный ввод/вывод двумерного массива. 68
4.5. Создание многооконных приложений. 71
4.5.1. Создание SDI –приложения. 72
4.5.2. Создание MDI –приложения. 75
Контрольные вопросы... 80
5. Объектно-ориентированное программирование в Microsoft Visual Studio 2005. 81
5.1. Дополнение класса формы средствами решения прикладной задачи 81
5.2. Создание отдельных классов. 84
5.3. Передача в классы указателей на формы.. 87
5.4. Создание форм в классах пользователя. 89
Контрольные вопросы... 91
Заключение.. 91
Библиографический список.. 92
Введение
Язык программирования С++ уже давно широко используется для составления самых разнообразных программ. Язык С# — это очередная ступень бесконечной эволюции языков программирования. Его создание вызвано процессом усовершенствования и адаптации, который определял разработку компьютерных языков в течение последних лет. Подобно всем успешным языкам, которые увидели свет раньше, С# опирается на прошлые достижения постоянно развивающегося искусства программирования.
В языке С# (созданном компанией Microsoft для поддержки среды .NET Framework) проверенные временем средства усовершенствованы с помощью самых современных технологий. С# предоставляет очень удобный и эффективный способ написания программ для современной среды вычислительной обработки данных, которая включает операционную систему Windows, Internet, компоненты и пр.
Компьютерные языки существуют не в вакууме. Они связаны друг с другом, причем на каждый новый язык в той или иной форме влияют его предшественники. В процессе такого "перекрестного опыления" средства из одного языка адаптируются другим, удачная новинка интегрируется в существующий контекст, а отжившая конструкция отбрасывается за ненадобностью. Примерно так и происходит эволюция компьютерных языков и развитие искусства программирования. Не избежал подобной участи и С#. Языку С# "досталось" богатое наследство. Он — прямой потомок двух самых успешных языков программирования (С и C++) и знающие язык Pascal, точнее его версию, реализованную на Delphi, наверняка узнают многие конструкции.
С# — это новый язык, разработанный Эндерсом Хейлсбергом в корпорации Microsoft в качестве основной среды разработки для .Net Framework и всех будущих продуктов Microsoft. C# берет свое начало в других языках, в основном, в C++, Java, Delphi, Modula-2 и Smalltalk. Про Хейлсберга следует сказать, что он был главным архитектором Turbo Pascal и Borland Delphi, и его огромный опыт способствовал весьма тщательной проработке нового языка. С одной стороны, для С# в еще большей степени, чем для упомянутых выше языков, характерна внутренняя объектная ориентация; с другой стороны, в нем реализована новая концепция упрощения объектов, что существенно облегчает освоение мира объектно-ориентированного программирования.
Формально для чтения данного пособия не требуется никакая предварительная подготовка, кроме базовой подготовки по программированию. Тем не менее знание языков программирования С++ и Delphi существенно упростят этот процесс
1 . Базовые элементы языка C#
Структура программы
Все приведенные в данном пособии примеры разработаны в среде Microsoft Studio 2005. Данная среда, как и другие среды визуально программирования, позволяет работать как в консольном, так и в режиме диалоговых окон. В первой части учебного пособия для изучения именно языка C# мы будем использовать консольный режим, во второй части рассмотрим разработку диалоговых окон. Для создания новой программы в консольном режиме после запуска Studio 2005 необходимо:
- Выбрать по очереди File – New – Project;
- Выбрать язык реализации Visual C#, тип проекта Windows, Console Application;
- Определить местонахождение нового проекта (Location) и дать ему имя (Name), в нашем случае ConsApp.
В ответ увидите следующую картину:
using System; //подключение стандартных библиотек
using System.Collections.Generic;
using System.Text;
namespace ConsApp
{
// здесь должны находиться созданные пользователем классы
class Program
{
// здесь должны быть функции пользователя при отсутствии классов
static void Main(string[] args)
{
// главная функция, здесь должны быть операторы
Console.WriteLine("Привет из Москвы”);
Console.ReadLine();
}
}
}
Программа начинается с области имен (ее имя мы определили при создании проекта), которая содержит созданный автоматически класс (Program), а составе этого класса – главная функция (Main). Наш пример содержит простейшую программу – традиционное приветствие. Заодно она показывает вывод символьных строк. Строка Console.ReadLine(); необходима как и в других консольных приложениях для задержки экрана пользователя после завершения программы. Как видите, ввод/вывод очень похож на Pascal. При отсутствии классов и функций пользователя весь текст программы находится в главной функции.
Типы данных
В C# имеются следующие типы данных
Тип данных | Размер | Диапазон значений |
Целочисленные типы данных | ||
sbyte | 1 байт, со знаком | -128 … 127 |
byte | 1байт, без знака | 0 … 255 |
char | 2 байта, символ Unicode | 0000 … FFFF |
short | 2 байта, со знаком | -32768 … 32767 |
ushort | 2 байта, без знака | 0 … 65535 |
int | 4 байта, со знаком | -2 147 483 646 … 2 147 483 647 |
uint | 4 байта, без знака | 0 … 4 294 967 295 |
long | 8 байтов, со знаком | -9 223 372 036 854 775 808 … 9 223 372 036 854 775 807 |
ulong | 8 байтов, без знака | 0 … 18 446 744 073 709 551 615 |
decimal | 28, 29 десятичных знаков | ±10e-28 … ±7.9e+28 |
Данные с плавающей точкой | ||
float | 7 десятичных знаков | 1.5e-45 … 3.4e38 |
double | 15-16 десятичных знаков | 5.0e-324 … 1.7e308 |
Логические данные | ||
bool | true … false | |
Символьные данные | ||
string | Строка любых символов |
В C#, как и в С++ большие и маленькие буквы разные, как в именах переменных, так и при написании служебных слов.
Объявление данных и присвоение начальных значений.
int i, k;
float x, y;
decimal d1;
short n;
string s1;
char c1;
bool b1;
i = 3;
n=9;
x = -6.7f; //или x = -456.43F;
double z;
z = 5.76; //или z = 5.34D; z = -76.45d;
d1 = 123.43m; // или d1 = 154.65M;
s1 = "ABCDEF";
c1 = '?';
b1=true;
Обратим внимание на то обстоятельство, что константа -6.7 имеет тип double и присвоение x = -6.7; является ошибкой! Также было бы ошибкой присвоение d1 = 123.43; Приведенные примеры показывают и обозначения констант float, double, decimal. Данные типа decimal можно рассматривать как аналог распространенного в системах управления базами данных типа данных Currency (денежный): вычисления с ними выполняются с большой точностью и без округления (если это возможно).
Явное и неявное преобразование данных.
Общее правило: неявно можно выполнять все преобразования, которые не приведут к потере информации. Поэтому данные типов bool, double, decimal не могут быть неявно преобразованы ни в какие типы данных. float может быть преобразован в double; int может быть преобразован в long, float, double, decimal; long может быть преобразован в float, double, decimal.
Явное преобразование выполняется следующим образом
(новый_тип_данных) переменная
Примеры (объявление данных - см. выше).
x=(float)56.3; // константа типа double
// преобразуется в float
d1 = (decimal)25.6; // константа типа double
// преобразуется в decimal
i = (int)8.6; //результат i=8
Ответственность за явные преобразования несет программист. Например, следующее преобразование формально не является ошибкой:
x=(float)56.6e+300; несмотря на то, что преобразовываемое значение не входит в диапазон допустимых значений данных типа float. Результаты таких преобразований в общем случае не определены. Однако, присвоения short n=123456789; и n=( short)123456789; являются синтаксическими ошибками.
В C# всем переменным до их использования в выражениях должны быть присвоены значения, в том числе нули и пустые строки. Использование в выражениях неинициализированных переменных считается ошибкой!
Очевидна рекомендация: без необходимости не предпринимайте подозрительных экспериментов с типами данных; если нет на то особых причин, можно рекомендовать ограничиться данными типа int, double, bool, string.