рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Обзор Microsoft Visual Studio 2005

Обзор Microsoft Visual Studio 2005 - раздел Информатика, Введение Программирование ...

Введение

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

Большая часть работы программиста связана с написанием исходного кода на одном из языков программирования. Различные языки программирования поддерживают различные стили программирования (т. н. парадигмы программирования). Отчасти искусство программирования состоит в том, чтобы выбрать один из языков, наиболее полно подходящий для решения имеющейся задачи. Разные языки требуют от программиста различного уровня внимания к деталям при реализации алгоритма, результатом чего часто бывает компромисс между простотой и производительностью.

Также немаловажной частью разработки программного обеспечения является (Интегрированная) среда разработки программного обеспечения (англ. IDE - Integrated development environment). Обычно среда разработки включает в себя текстовый редактор, компилятор и/или интерпретатор, средства автоматизации сборки и отладчик. Иногда также содержит систему управления версиями и разнообразные инструменты для упрощения конструирования графического интерфейса пользователя. Все эти средства позволяют существенно упростить и ускорить разработку программного обеспечения, однако требуют от программиста дополнительных навыков работы.


ЗНАКОМСТВО СО СРЕДОЙ MS VISUAL STUDIO

Обзор Microsoft Visual Studio 2005

Особенностью Visual Studio является тот факт, что в рамках одной среды разработки собрано большое количество языков программирования. Так Microsoft… 1. C/C++ 2. Java

Создание простого приложения в MS Visual Studio

Рассмотрим пример создания простого консольного приложения в среде MS Visual Studio 2005 Professional. После загрузки среды разработки первым что вы увидите будет стартовая страница показанная на рисунке 1

 

Рисунок 1 - Стартовое окно программы

 

Для создания нового проекта необходимо войти в главное меню программы и выбрать File->New->Project. В открывшемся окне необходимо в разделе С# выбрать пункт Console Application. Среда разработки автоматически откроет новое окно (рисунок 2) и сгенерирует минимально необходимое количество программного кода.

 

Рисунок 2 - Проект консольного приложения

 

В качестве примера возьмем простую программу, выводящую на экран текстовое сообщение и выполняющую простую арифметическую операцию:

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication3

{

class Program

{

static void Main(string[] args)

{

Console.WriteLine("Hello Vasya!!!, 2+2={0}", 2+2);

Console.ReadKey();

}

}

}

Для запуска программы необходимо выполнить команду главного меню Debug->Start without debugging. На экран будет выведено окно показанное на рисунке 3.

 

Рисунок 3 - Результат выполнения программы

Отладка программы

В качестве пример для отладки возмем следующую программу, которая должна менять местами значение двух переменных: using System; using System.Collections.Generic;

Пошаговый режим

Для активации пошагового режима нажмите клавишу F10 или выберите пункт меню Debug/Step Over. На рисунке 1 представлено окно пошагового режима.  

Точки останова

Существует два основных типа точек останова: условные и безусловные.  

Безусловные точки останова

   

Условные точки останова

Очень часто, например, при отладке циклов и других сложных конструкиций бывает удобно наложить условие на точки останова. Для установки условия в… Рисунок 7 – Окно Condition

Просмотр переменных

Для просмотра переменных необходимо установить точку останова на какой-либо часть программы и запустить ее. Программа остановит свою работу, как… Второй, более обширной, возможностью просмотра значений переменных, является…  

Стек вызова функций

Бьтает очень полезно посмотреть, какая именно функция вызвала ту функцию, которую вы трассируете. Для этого существует окно стека вызова функций…  

Разработка оконных приложений

   

Размещение компонентов на форме. Свойства компонента.

   

Основные компоненты

К основным компонентам относятся самые популярные элементы управления Windows, меню, панель управления, с которыми приходиться постоянно сталкиваться при работе в Windows.

 

Компонент Button

 

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

 

Компонент CheckBox

   

Компонент CheckBoxListBox

Компонент CheckBoxListBox предназначен для размещения группы элементов CheckBox, объединенной общим контейнером. Для включения элементов в контейнер…  

Компонент RadioButton

RadioButton по своим свойствам немного похожи на CheckBox. Его главное отличие заключается в том, что группа чекбоксов позволяет выбрать любую комбинацию параметров, радиокнопки же дают возможность выбрать только один параметр. Из этого различия проистекают и все остальные. Например, в группе не может быть меньше двух радиокнопок. Кроме того, у радиокнопок не может быть смешанного состояния (нельзя совместить взаимоисключающие параметры).

Компонент TextBox

К основным обработчикам событий данного компонента относят Key Press, который позволяет, например, ограничить тип вводимых значений в данное поле, и…  

Компонент RichTextBox

Вводить текст в RichTextBox можно с помощью свойства Text данного элемента, которое предоставляет окно, в которое осуществляется ввод. Общий вид RichTextBox представлен на рисунке 10.  

Компонент ListBox

Задать список элементов в ListBox можно так же как и для компонента CheckBoxListBox с помощью свойства Items. Общий вид ListBox представлен на рисунке 11.  

Компонент ComboBox

Этот вариант списка удобен тем, что не занимает много пространства на форме. Постоянно на форме представлено только одно значение этого списка. При… Задать список элементов в ComboBox можно так же как и в предыдущем случае с… Общий вид ComboBox представлен на рисунке 12.

Компонент Label

   

Компонент LinkLabel

LinkLabel представляет собой гиперссылку, которыми наполнен Интернет. Разработчики Visual Studio представили этот элемент управления как… Общий вид LinkLabel представлен на рисунке 14.  

Компонент ProgressBar

Общий вид ProgressBar представлен на рисунке 15.  

Пример размещения компонентов в приложении

На рисунке 16 представлено окно приложения, которое демонстрирует рассмотренные выше компоненты в действии.

 

 

Рисунок 16 – Пример

При размещении этих компонентов Visual Studio автоматически создала код для каждого компонента, который можно просмотреть, выбрав вкладку Form.Designer.cs, где расположен исходный текст данного приложения.

Окно Form1.Designer.cs показано на рисунке 17.

 

 

Рисунок 17 – Пример

 

Далее приведен код, который был сгенерирован для данного приложения:

 

#region Windows Form Designer generated code

 

/// <summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

/// </summary>

private void InitializeComponent()

{

this.button1 = new System.Windows.Forms.Button();

this.checkedListBox1 = new System.Windows.Forms.CheckedListBox();

this.label1 = new System.Windows.Forms.Label();

this.listBox1 = new System.Windows.Forms.ListBox();

this.label4 = new System.Windows.Forms.Label();

this.radioButton1 = new System.Windows.Forms.RadioButton();

this.radioButton2 = new System.Windows.Forms.RadioButton();

this.radioButton3 = new System.Windows.Forms.RadioButton();

this.radioButton4 = new System.Windows.Forms.RadioButton();

this.label5 = new System.Windows.Forms.Label();

this.button2 = new System.Windows.Forms.Button();

this.textBox1 = new System.Windows.Forms.TextBox();

this.label2 = new System.Windows.Forms.Label();

this.SuspendLayout();

//

// button1

//

this.button1.Location = new System.Drawing.Point(12, 342);

this.button1.Name = "button1";

this.button1.Size = new System.Drawing.Size(75, 23);

this.button1.TabIndex = 0;

this.button1.Text = "ОК";

this.button1.UseVisualStyleBackColor = true;

//

// checkedListBox1

//

this.checkedListBox1.FormattingEnabled = true;

this.checkedListBox1.Items.AddRange(new object[] {

"ComboBox",

"TextBox",

"ProgressBar",

"RichTextBox"});

this.checkedListBox1.Location = new System.Drawing.Point(15, 25);

this.checkedListBox1.Name = "checkedListBox1";

this.checkedListBox1.Size = new System.Drawing.Size(181, 64);

this.checkedListBox1.TabIndex = 2;

//

// label1

//

this.label1.AutoSize = true;

this.label1.Location = new System.Drawing.Point(12, 9);

this.label1.Name = "label1";

this.label1.Size = new System.Drawing.Size(349, 13);

this.label1.TabIndex = 3;

this.label1.Text = "Какой элемент лучше использовать для большого объема текста?";

this.label1.Click += new System.EventHandler(this.label1_Click);

//

// listBox1

//

this.listBox1.FormattingEnabled = true;

this.listBox1.Items.AddRange(new object[] {

"LinkLabel",

"RadioButton",

"Label",

"TextBox"});

this.listBox1.Location = new System.Drawing.Point(12, 237);

this.listBox1.Name = "listBox1";

this.listBox1.Size = new System.Drawing.Size(175, 56);

this.listBox1.TabIndex = 6;

//

// label4

//

this.label4.AutoSize = true;

this.label4.Location = new System.Drawing.Point(12, 107);

this.label4.Name = "label4";

this.label4.Size = new System.Drawing.Size(337, 13);

this.label4.TabIndex = 12;

this.label4.Text = "Какой элемент используется в качестве индикатора процесса? ";

//

// radioButton1

//

this.radioButton1.AutoSize = true;

this.radioButton1.Location = new System.Drawing.Point(15, 123);

this.radioButton1.Name = "radioButton1";

this.radioButton1.Size = new System.Drawing.Size(51, 17);

this.radioButton1.TabIndex = 13;

this.radioButton1.TabStop = true;

this.radioButton1.Text = "Label";

this.radioButton1.UseVisualStyleBackColor = true;

//

// radioButton2

//

this.radioButton2.AutoSize = true;

this.radioButton2.Location = new System.Drawing.Point(15, 146);

this.radioButton2.Name = "radioButton2";

this.radioButton2.Size = new System.Drawing.Size(71, 17);

this.radioButton2.TabIndex = 14;

this.radioButton2.TabStop = true;

this.radioButton2.Text = "LinkLabel";

this.radioButton2.UseVisualStyleBackColor = true;

//

// radioButton3

//

this.radioButton3.AutoSize = true;

this.radioButton3.Location = new System.Drawing.Point(15, 169);

this.radioButton3.Name = "radioButton3";

this.radioButton3.Size = new System.Drawing.Size(56, 17);

this.radioButton3.TabIndex = 15;

this.radioButton3.TabStop = true;

this.radioButton3.Text = "Button";

this.radioButton3.UseVisualStyleBackColor = true;

//

// radioButton4

//

this.radioButton4.AutoSize = true;

this.radioButton4.Location = new System.Drawing.Point(15, 192);

this.radioButton4.Name = "radioButton4";

this.radioButton4.Size = new System.Drawing.Size(82, 17);

this.radioButton4.TabIndex = 16;

this.radioButton4.TabStop = true;

this.radioButton4.Text = "ProgressBar";

this.radioButton4.UseVisualStyleBackColor = true;

//

// label5

//

this.label5.AutoSize = true;

this.label5.Location = new System.Drawing.Point(12, 221);

this.label5.Name = "label5";

this.label5.Size = new System.Drawing.Size(396, 13);

this.label5.TabIndex = 17;

this.label5.Text = "Какой элемент используется для отображения гиперссылки для Интернет?";

//

// button2

//

this.button2.Location = new System.Drawing.Point(93, 342);

this.button2.Name = "button2";

this.button2.Size = new System.Drawing.Size(75, 23);

this.button2.TabIndex = 1;

this.button2.Text = "Cancel";

this.button2.UseVisualStyleBackColor = true;

//

// textBox1

//

this.textBox1.Location = new System.Drawing.Point(109, 308);

this.textBox1.Name = "textBox1";

this.textBox1.Size = new System.Drawing.Size(100, 20);

this.textBox1.TabIndex = 4;

//

// label2

//

this.label2.AutoSize = true;

this.label2.Location = new System.Drawing.Point(12, 308);

this.label2.Name = "label2";

this.label2.Size = new System.Drawing.Size(91, 13);

this.label2.TabIndex = 8;

this.label2.Text = "Введи свое имя:";

//

// Form1

//

this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);

this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

this.ClientSize = new System.Drawing.Size(486, 377);

this.Controls.Add(this.label5);

this.Controls.Add(this.radioButton4);

this.Controls.Add(this.radioButton3);

this.Controls.Add(this.radioButton2);

this.Controls.Add(this.radioButton1);

this.Controls.Add(this.label4);

this.Controls.Add(this.label2);

this.Controls.Add(this.listBox1);

this.Controls.Add(this.textBox1);

this.Controls.Add(this.label1);

this.Controls.Add(this.checkedListBox1);

this.Controls.Add(this.button2);

this.Controls.Add(this.button1);

this.Name = "Form1";

this.Text = "Тест";

this.ResumeLayout(false);

this.PerformLayout();

 

}

 

#endregion

 


ЯЗЫК ПРОГРАММИРОВАНИЯ С#

Обзор языка С#

 

Андерс Хиджисберг, который возглавил в Microsoft работу по созданию языка С#, следующим образом определил стоявшие перед ними цели:

- создать первый компонентно-ориентированный язык программирования семейства C/C++;

- создать объектно-ориентированный язык, в котором любая сущность

представляется объектом;

- упростить C++, сохранив его мощь и основные конструкции.

Главное новшество связано с заявленной компонентной ориентированностью языка. Компоненты позволяют решать проблему модульного построения приложений на новом уровне. Построение компонентов обычно определяется не только языком, но и платформой, на которой этот язык реализован.

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

ООП — это мощный "рычаг", позволяющий усовершенствовать процесс программирования. С момента изобретения компьютера методы программирования менялись

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

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

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

 

Сравнение языков С# и С++

Ниже приведены основные отличия языка C# от его основного прародителя языка C++.

Указатели и управление памятью

Нормальный стиль программирования на С# предполагает написание безопасного кода, а это значит — никаких указателей, никакой адресной арифметики,… Небезопасный код для С#-программистов будет скорее исключением, чем правилом.…

Наследование и шаблоны

В языке С# не реализованы такие важные для C++ моменты, как множественное наследование и шаблоны. Множественное наследование в С# возможно только для интерфейсов.

Типы данных

В языке С# появилась принципиально новая классификация типов, подразделяющая типы на значимые и ссылочные. Как следствие, применяются разные способы работы с объектами этих типов. В языке устранена разница между переменными и объектами. Все переменные в С# — тоже объекты, которые имеют единого предка — класс System.Object.

Структуры

В языке C++ структуры подобны классу, за небольшими исключениями. В С# разница между структурой и классом более существенна: структуры не могут иметь наследников, классы относятся к ссылочным типам, а структуры — к значимым.

Массивы

В языке С# имеется возможность как объявлять классические массивы, так и работать с массивами при помощи встроенных классов. Работа с массивами в С# более безопасна, поскольку выход за границы массива контролируется (при условии использования безопасного кода).

Классы

Следует отметить различия в подходах к сокрытию свойств класса. В C++ такое понятие, как свойство, вообще отсутствовало. В С# введены процедуры-свойства get и set, аналогичные тому, как это сделано в языке VB. Синтаксис обращения к свойствам класса в С# аналогичен синтаксису обращения к данным.

Синтаксические и семантические детали

В С# оператор switch не требует задания break для прерывания операции. Булевы переменные в языке С# имеют два значения, вместо них нельзя использовать целочисленные переменные, как это принято в C++.

В С# точка используется всюду, где в C++ применяются три разных сим-

вола— ".", "::", "->".__

 

 

ТИПЫ ДАННЫХ

Типы данных принято разделять на простые и сложные в зависимости от того, как устроены их данные. У простых (скалярных) типов возможные значения… Есть и другие критерии классификации типов. Так, типы разделяются на… Типы данных разделяются также на статические и динамические. Для данных статического типа память отводится в момент…

Переменные

Общий синтаксис объявления сущностей в C# похож на синтаксис объявления в C++, хотя и имеет ряд отличий. Вот какова общая структура объявления:   [<атрибуты>] [<модификаторы>] <тип> <объявители>;

Приведение типов

В C# преобразования делятся на неявные и явные. К неявным относятся те преобразования, результат выполнения которых всегда успешен и не приводит к… К явным относятся разрешенные преобразования, успех выполнения которых не… Важным классом преобразований являются преобразования в строковый тип и наоборот. Преобразования в строковый тип…

Операции, приоритет

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

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

Ниже приведена таблица приоритетов операций, в каждой строке которой собраны операции одного приоритета, а строки следуют в порядке приоритетов, от высшего к низшему.

 

Приоритет Категория Операции Порядок
Первичные (expr) x.y f(x) a[x] x++ x-- new sizeof(t) typeof(t) checked(expr) unchecked(expr) Слева направо
Унарные + - ! ~ ++x --x (T)x Слева направо
Мультипликативные (Умножение) * / % Слева направо
Аддитивные (Сложение) + - Слева направо
Сдвиг << >> Слева направо
Отношения, проверка типов < > <= >= is as Слева направо
Эквивалентность == != Слева направо
Логическое И & Слева направо
Логическое исключающее ИЛИ (XOR) ^ Слева направо
Логическое ИЛИ (OR) | Слева направо
Условное И && Слева направо
Условное ИЛИ || Слева направо
Условное выражение ? : Справа налево
Присваивание = *= /= %= += -= <<= >>= &= ^= |= Справа налево

 

Перегрузка операций

Под перегрузкой операции понимается существование нескольких реализаций одной и той же операции. Большинство операций языка C# перегружены - одна и…  

УПРАВЛЯЮЩИЕ ОПЕРАТОРЫ

Операторы выбора

 

Как в С++ и других языках программирования, в языке C# для выбора одной из нескольких возможностей используются две конструкции - if и switch.

 

Оператор if

 

Синтаксиса оператора if имеет следующий вид:

 

if(выражение_1) оператор_1

else if(выражение_2) оператор_2

...

else if(выражение_K) оператор_K

else оператор_N

 

Выражения if должны быть булевого типа.

 

Выражения if проверяются в порядке их написания. Как только получено значение true, проверка прекращается и выполняется оператор (это может быть блок), который следует за выражением, получившим значение true. С завершением этого оператора завершается и оператор if. Ветвь else, если она есть, относится к ближайшему открытому if.

Оператор switch

 

Частным, но важным случаем выбора из нескольких вариантов является ситуация, при которой выбор варианта определяется значениями некоторого выражения. Соответствующий оператор C#, унаследованный от C++, но с небольшими изменениями в синтаксисе, называется оператором switch. Вот его синтаксис:

 

switch(выражение)

{

case константное_выражение_1: [операторы_1 оператор_перехода_1]

...

case константное_выражение_K: [операторы_K оператор_перехода_K]

[default: операторы_N оператор_перехода_N]

}

 

Вначале вычисляется значение switch-выражения. Затем оно поочередно в порядке следования case сравнивается на совпадение с константными выражениями. Как только достигнуто совпадение, выполняется соответствующая последовательность операторов case-ветви. Поскольку последний оператор этой последовательности является оператором перехода (чаще всего это оператор break), то обычно он завершает выполнение оператора switch. Использование операторов перехода - это плохая идея. Таким оператором может быть оператор goto, передающий управление другой case-ветви, которая, в свою очередь, может передать управление еще куда-нибудь, получая блюдо "спагетти" вместо хорошо структурированной последовательности операторов. Семантика осложняется еще и тем, что case-ветвь может быть пустой последовательностью операторов. Тогда в случае совпадения константного выражения этой ветви со значением switch-выражения будет выполняться первая непустая последовательность очередной case-ветви. Если значение switch-выражения не совпадает ни с одним константным выражением, то выполняется последовательность операторов ветви default, если же таковой ветви нет, то оператор switch эквивалентен пустому оператору.

 

Когда разбор случаев предполагает проверку попадания в некоторый диапазон значений, приходится прибегать к оператору if для формирования специальной переменной. Этот прием демонстрируется в следующем примере:

 

/// <summary>

/// Определяет период в зависимости от возраста - age

/// Использование ветвящегося оператора if

/// </summary>

public void SetPeriod()

{

if ((age > 0)&& (age <7))period=1;

else if ((age >= 7)&& (age <17))period=2;

else if ((age >= 17)&& (age <22))period=3;

else if ((age >= 22)&& (age <27))period=4;

else if ((age >= 27)&& (age <37))period=5;

else period =6;

}

 

Этот пример демонстрирует применение ветвящегося оператора if.

 

/// <summary>

/// Определяет статус в зависимости от периода - period

/// Использование разбора случаев - оператора Switch

/// </summary>

public void SetStatus()

{

switch (period)

{

case 1:

status = "child";

break;

case 2:

status = "schoolboy";

break;

case 3:

status = "student";

break;

case 4:

status = "junior researcher";

break;

case 5:

status = "senior researcher";

break;

case 6:

status = "professor";

break;

default :

status = "не определен";

break;

}

Console.WriteLine("Имя = {0}, Возраст = {1}, Статус = {2}",

name, age, status);

}//SetStatus

 

Этот пример демонстрирует корректный стиль использования оператора switch.

 

Операторы перехода

 

Операторов перехода, позволяющих прервать естественный порядок выполнения операторов блока, в языке C# имеется несколько.

 

Оператор goto

 

Оператор goto имеет простой синтаксис и семантику:

 

goto [метка|case константное_выражение|default];

 

Все операторы языка C# могут иметь метку - уникальный идентификатор, предшествующий оператору и отделенный от него символом двоеточия. Передача управления помеченному оператору - это классическое использование оператора goto. Два других способа использования goto (передача управления в case или default-ветвь) используются в операторе switch, о чем шла речь выше.

 

Операторы break и continue

 

В структурном программировании признаются полезными "переходы вперед" (но не назад), позволяющие при выполнении некоторого условия выйти из цикла, из оператора выбора, из блока. Для этой цели можно использовать оператор goto, но лучше применять специально предназначенные для этих целей операторы break и continue.

 

Оператор break может стоять в теле цикла или завершать case-ветвь в операторе switch. Пример его использования в операторе switch уже демонстрировался. При выполнении оператора break в теле цикла завершается выполнение самого внутреннего цикла. В теле цикла, чаще всего, оператор break помещается в одну из ветвей оператора if, проверяющего условие преждевременного завершения цикла:

 

public void Jumps()

{

int i = 1, j=1;

for(i =1; i<100; i++)

{

for(j = 1; j<10;j++)

{

if (j>=3) break;

}

Console.WriteLine("Выход из цикла j при j = {0}", j);

if (i>=3) break;

}

Console.WriteLine("Выход из цикла i при i= {0}", i);

}//Jumps

 

Оператор continue используется только в теле цикла. В отличие от оператора break, завершающего внутренний цикл, continue осуществляет переход к следующей итерации этого цикла.

 

Оператор return

 

Еще одним оператором, относящимся к группе операторов перехода, является оператор return, позволяющий завершить выполнение процедуры или функции. Его синтаксис:

 

return [выражение];

 

Для функций его присутствие и аргумент обязательны, поскольку выражение в операторе return задает значение, возвращаемое функцией.

 

Операторы цикла

 

Оператор for

 

Наследованный от С++ весьма удобный оператор цикла for обобщает известную конструкцию цикла типа арифметической прогрессии. Его синтаксис:

 

for(инициализаторы; условие; список_выражений) оператор

 

Оператор, стоящий после закрывающей скобки, задает тело цикла. В большинстве случаев телом цикла является блок. Сколько раз будет выполняться тело цикла, зависит от трех управляющих элементов, заданных в скобках. Инициализаторы задают начальное значение одной или нескольких переменных, часто называемых счетчиками или просто переменными цикла. В большинстве случаев цикл for имеет один счетчик, но часто полезно иметь несколько счетчиков, что и будет продемонстрировано в следующем примере. Условие задает условие окончания цикла, соответствующее выражение при вычислении должно получать значение true или false. Список выражений, записанный через запятую, показывает, как меняются счетчики цикла на каждом шаге выполнения. Если условие цикла истинно, то выполняется тело цикла, затем изменяются значения счетчиков и снова проверяется условие. Как только условие становится ложным, цикл завершает свою работу. В цикле for тело цикла может ни разу не выполняться, если условие цикла ложно после инициализации, а может происходить зацикливание, если условие всегда остается истинным. В нормальной ситуации тело цикла выполняется конечное число раз.

Счетчики цикла зачастую объявляются непосредственно в инициализаторе и соответственно являются переменными, локализованными в цикле, так что после завершения цикла они перестают существовать.

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

 

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

 

/// <summary>

/// Определение палиндромов.Демонстрация цикла for

/// </summary>

/// <param name="str">текст</param>

/// <returns>true - если текст является палиндромом</returns>

public bool Palindrom(string str)

{

for (int i =0,j =str.Length-1; i<j; i++,j--)

if(str[i]!=str[j]) return(false);

return(true);

}//Palindrom

 

Циклы While

Цикл while (выражение) является универсальным видом цикла, включаемым во все языки программирования. Тело цикла выполняется до тех пор, пока…   while(выражение) оператор

Цикл foreach

Новым видом цикла, не унаследованным от С++, является цикл foreach, удобный при работе с массивами, коллекциями и другими подобными контейнерами…   foreach(тип идентификатор in контейнер) оператор

ПРОГРАММИРОВАНИЕ КЛАССОВ

 

Прежде, чем перейти к понятию классов в С#, приведем несколько основных понятий объектно-ориентированного программирования, которые являются важнейшими при работе с классами:

1. Инкапсуляция – механизм, который определяет данные и код, манипулирующий этими данными, а также защищает то и другое от постороннего вмешательства.

2. Абстракция данных – возможность определять новые типы данных, с которыми можно работать почти так же как и с основными типами данных. Такие типы данных называют абстрактными типами данных или типами данных определенные пользователем.

3. Наследование – процесс, посредством которого один объект может приобретать свойства другого.

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

 

Введение в классы и объекты в С#

Весь активный процесс С#-программы происходит в пределах класса, поэтому понятие класса является фундаментальным в данном языке. Класс является основой для создания объектов. В классе определяются данные и код для работы с этими данными. Объекты являются экземплярами класса. Непосредственная инициализация переменных в объекте (экземпляре класса) происходит с помощью конструктора. В классе может быть несколько конструкторов, т.е. класс является набором проектов, которые определяют как строить объект. Очень важно понимать разницу между объектом и классом: класс является логической абстракцией до тех пор, пока не будет создан объект и не появиться физическая реализация этого класса в памяти компьютера.

 

Общий синтаксис класса

 

При определении класса объявляются данные и код, которые эти данные обрабатывает. При этом данные называются полями, а код - методами.

В общем случае определение класса состоит из двух частей: заголовка, включающего ключевое слово class, за которым следует имя класса, и тела, заключенного в фигурные скобки:

class <имя_класса>

{

//тело_класса

//объявление полей класса

<спецификатор_доступа> <тип> <имя_переменной1>;

<спецификатор_доступа> <тип> <имя_переменной2>;

<спецификатор_доступа> <тип> <имя_переменнойN>;

//объявлоение методов

<спецификатор_доступа> <тип> <имя_метода1> (<параметры>)

{

//тело метода

}

<спецификатор_доступа> <тип> <имя_метода2> (<параметры>)

{

//тело метода

}

<спецификатор_доступа> <тип> <имя_методаN> (<параметры>)

{

//тело метода

}

}

 

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

Существуют следующие спецификаторы доступа:

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

2. private. С помощью него объявляются закрытые члены класса, которые доступны только членам класса.

3. protected. С помощью него объявляются защищенные члены класса, которые доступны членам данного класса и всем членам производных классов, но недоступны для любой другой части программы.

Каждое определение класса вводит новый тип данных. Даже если два класса имеют одинаковые списки членов, они все равно считаются разными типами.

Тело класса определяет отдельную область видимости. Объявление членов внутри тела помещает их имена в область видимости класса. Наличие в двух разных классах членов с одинаковыми именами – не ошибка, эти имена относятся к разным объектам.

Пример класса, в котором хранятся данные о различных моделях машин:

class Vehicle

{

private int passengers; //количество мест для пассажиров

private string mark; //марка

private string model; //модель

private int fuelcap; //объем двигателя

//метод для установки значений для закрытых членов класса

public void setVehicle(int pass, string Mark, string Model, int fuelCap)

{

passengers = pass;

mark = Mark;

model = Model;

fuelcap = fuelCap;

}

}

 

Поля и свойства

public <тип> <имя_свойства> { get {return <имя_поля>;}

Методы

Методы – подпрограммы, которые обеспечивают доступ и управляют данными, определенными в классе. Для объявления метода используется следующая конструкция:

<спецификатор_доступа> <тип> <имя_метода> (<параметры>)

{

//тело метода

}

В теле метода записываются различные операторы, а в скобочках параметры, которые будут переданы данному методу. Параметры находятся в области видимости только своего метода.

После вызова метода, управление из него возвращается в двух случаях: либо когда встретиться закрывающая фигурная скобка, либо когда выполняется оператор return.

Общий вид данного оператора следующий:

return <возвращаемое_значение>;

Существует две формы оператора return, одна встречается в методах, имеющих тип void (они не возвращают значения), а вторая – в методах, возвращающих значение. В методах типа void оператор return приводит к немедленному завершению работы метода. Когда он выполняется, управление передается в точку программы, откуда был вызван метод. При этом возвращемое значение не записывается. В методах, которые возвращают значения, также оператор return приведет к немедленному завершению работы метода, но при этом будет передано некое значение переменной, для которой был вызван метод.

 

Использование переменного числа аргументов

Модификатор params используется для объявления параметра-массива, который сможет получить некоторое количество аргументов (в том числе и нулевое).… Рассмотрим пример метода, который возвращает минимальное число из всех… class Min

Объявление объектов класса. Оператор new

 

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

<имя_класса> <имя_переменной> = new <конструктор_класса>

Оператор new динамически выделяет память для объекта и возвращает ссылку на эту область памяти. Таким образом переменная, определенная в данной конструкции не является объектом, она лишь ссылается на объект, который был физически создан в памяти компьютера оператором new. Следовательно, всем объектам в С# память должна выделяться динамически.

В качестве примера объявим объект класса Vehicle:

Vehicle myCar = new Vehicle();

Поскольку доступ к объектам класса осуществляется с помощью ссылки, классы иначе называют ссылочными типами.

Инциализация членов класса

 

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

<имя_объекта>.<член_объекта>

В качестве примера приведем объявление и инициализацию объекта класса Vehicle, который был представлен ранее:

using System;

class Vehicle

{

private int passengers; //количество мест для пассажиров

private string mark; //марка

private string model; //модель

private int fuelcap; //объем двигателя

//метод для установки значений для закрытых членов класса

public void setVehicle(int pass, int Mark, int Model, int fuelCap)

{

passengers = pass;

mark = Mark;

model = Model;

fuelcap = fuelCap;

}

public int Passengers

{

get {return passengers;}

set {passengers = value;}

}

public string Mark

{

get {return mark;}

set {mark = value;}

}

public int Model

{

get {return model;}

set {model = value;}

}

public string Fuelcap

{

get {return fuelcap;}

set {fuelcap = value;}

}

}

class vehicleDemo {

public static void main()

{

Vehicle vehicle1 = new Vehicle();

Vehicle vehicle2 = new Vehicle();

vehicle1.setVehicle(4,”Lada”,”Kalina”,2);

vehicle2.Passengers = 4;

int passengersCount = vehicle1. Passengers;

Console.WriteLine(passengersCount);

}

}

Конструкторы и деструкторы

Существует специальная категория методов, отвечающих за такие действия с объектами, как инициализация, присваивание, управление памятью и… Конструктор имеет следуюий вид: <имя_класса>()

Ключевое слово this

При вызове метода ему автоматически передается неявный аргумент, который является ссылкой на вызываемый объект (т.е. на объект, с данными которого… Поскольку this определен в классе, то область его действия – класс, в котором… В качестве примера используем конструктор из предыдущего примера:

Ключевое слово static

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

Наследование

В языке С# класс, который наследуется, называется базовым. Класс, который на­следует базовый класс, называется производным. Следовательно,… С# поддерживает наследование, позволяя в объявление класса встраивать другой…  

Абстрактные классы

Методы класса могут быть объявлены как абстрактные. Это означает, что в этом классе нет реализации этих методов. Абстрактные методы пишутся с модификатором abstract. Класс, в котором есть хотя бы

один абстрактный метод, называется абстрактным (в таком классе могут быть и обычные методы). Нельзя создавать экземпляры абстрактного класса — такой класс может использоваться только в качестве базового класса для других классов. Для потомка такого класса есть две возможности — или он реализует все абстрактные методы базового класса (и в этом случае для такого класса-потомка мы сможем создавать его экземпляры), или реализует не все абстрактные методы базового класса (в этом случае он является тоже абстрактным классом, и единственная возможность его использования — это производить от него классы потомки). Вот пример, иллюстрирующий использование абстрактных

классов:

using System;

namespace test

{

abstract class Figure

{

//Площадь фигуры

public abstract double square();

public abstract double perimeter();

}

class Triangle: Figure

108 Раздел I I . Фундаментальные понятия

double а, Ь, с; //Стороны

//Конструктор

public Triangle (double a, double b, double с)

{

this.a=a;

this .b=-b;

this.c=c;

I

public override double square()

{

//Используем формулу Герока

double p - (aib+c)/2;

return Math.Sqrt(p*(p-a)* (p-b)* (p-c));

I

public override double perimeter()

i

return a-ib+c;

class Rectangle: Figure

{

double a, b; //Стороны

//Конструктор

public Rectangle(double a, double b)

{

this.a=a;

this.b=b;

}

public override double squared

{

return a*b;

}

public override double perimeter!)

!

return (afb)*2;

}

}

class Test

{

public static void Main()

t

Figure fl, f2;

fl=new Triangle(3, 4, 5);

f2=new Rectangle(2, 6);

System.Console.WriteLine(f1.perimeter()i", "+ f1.square()

System.Console . WriteLine (f 2 .perimeter ()•+", "+ f 2 . square ()

Результаты работы программы отобразятся как:

12, 6

16, 12

Тут мы объявляем абстрактный класс Figure, от которого производим два класса — Rectangle (класс прямоугольника) и Triangle (треугольника). В классе Figure есть два абстрактных метода — square (для подсчета площади) и perimeter (для периметра). Так как для произвольной фигуры формул для площади и для периметра не существует, то эти методы объявлены в классе Figure и переопределены в производных классах (с ключевым словом override). Далее в классе Test мы проводим испытание — заводим две переменные ссылочного типа базового класса Figure, ниже в эти ссылки мы записываем созданные экземпляры производных классов Triangle и Rectangle. Обратите внимание, что ссылку на абстрактный класс мы создать можем, а экземпляр — нет. Далее мы выводим на экран периметр и площадь для наших фигур.


Интерфейсы

Интерфейсы синтаксически подобны абстрактным классам. Однако в интерфейсе ни один метод не может включать тело, т.е. интерфейс в принципе не… Для реализации интерфейса класс должен обеспечить тела (способы реализации)… Интерфейсы объявляются с помощью ключевого слова interface. Вот как выгля­дит упрошенная форма объявления…

Реализация интерфейсов

class имя_класса : имя_интерфейса { // тело класса } Нетрудно догадаться, что имя реализуемого интерфейса задается с помощью эле­мента имя_интерфейса.

Интерфейсные свойства

// Интерфейсное свойство тип имя{ get; set;

Интерфейсные индексаторы

// Интерфейсный индексатор тип_элемента this[int индекс]{ get; set;

Массивы

При работе программы с набором объектов одинакового типа во многих случаях удобно образовать из этих объектов структуру данных, называемую массивом.… Каждый элемент массива хранит один объект и ему присваивается свой номер… int[] mas = new int[10];

Типы массивов

Как и большинство языков программирования, язык С# позволяет создавать одномерные и многомерные массивы. Кроме того, возможно создание массивов, содержащих другие массивы.

 

Одномерные массивы

Задание значений элементам массива может быть статическим и динамическим. При статическом задании значений их указывают сразу при создании… int[] mas = {1,7,13}; Заметим, что при данном типе задания элементов массива их индексы указывать не нужно, так как они определяются…

Двумерные массивы

Двумерные массивы можно представить в виде матрицы, в узлах которой хранятся объекты. Для создания двумерного массива используется конструкция… int[,] TwoDimArray = new int[2,3]; Здесь при объявлении массива мы использовали запятую для того, чтобы указать компилятору на необходимость создания…

Многомерные массивы

Многомерные массивы имеют структуру, похожую на двумерные массивы, но более сложного вида. Как пример, рассмотрим объявление трехмерного массива.

int[,,] MultiDimArray = new int[6,4,8];

Количество запятых должно равняться размерности массива, уменьшенной на 1.

Инициализация многомерных массивов может быть как динамической, так и статической.

 

Массивы массивов

В языке С# допускается создавать массивы массивов, называемые также несимметричными массивами или ступенчатыми. Рисунок 1 – пример ступенчатого массива

Обработка исключительных ситуаций

Простейшим примером ошибки является деление на 0 и выход за границы массива. Рассмотрим данную ошибку на примере. using System;

Предварительная проверка параметров

Качественно написанные программы не должны выдавать пользователю системное сообщение об ошибке. Обнаружив ошибку, программа должна сообщить… if(I != 0) {

Проверка кодов возврата функций и методов

  using System; namespace DivByZero

Блоки try-catch

В блок try заключается код, который может вызвать возникновение ошибок, т. с. «ненадежный» код. Следом за блоком try может располагаться один или… Рассмотрим пример обработки ошибки деления на нуль с помощью исключений using System;

Применение блока finally

Наилучшее применение для блока finally— освобождение ресурсов, заказан­ных программой перед возникновением исключений. Хотя система сборки мусора… Рассмотрим пример использования блока finally. using System;

Массивы как коллекции

На практике довольно часто возникают случаи, когда объект задается многократно. В подобных случаях довольно удобна нумеровка подобных объектов.… 1. дни месяца нумеруются от 1 до 28(или больше); 2. дома на улице могут иметь номера до тысячи;

Коллекция ArrayList

Проблема статического создания массива решается при помощи использования другого класа данных языка С#. В пространстве имен System.Collections… Using System.Collections; …

– Конец работы –

Используемые теги: обзор, Microsoft, Visual, Studio, 20050.078

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Обзор Microsoft Visual Studio 2005

Что будем делать с полученным материалом:

Если этот материал оказался полезным для Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Еще рефераты, курсовые, дипломные работы на эту тему:

Изучение среды разработки Microsoft Visual Studio
Национальный аэрокосмический университет им Н Е Жуковского Харьковский авиационный институт...

Функции в языке программирования на Visual Basic 2005
Понятию функции в языках программирования близко к понятию функции в математике. Например: в математике корень квадратный обозначается так… Функции вырезания левой подстроки Left ( ) В функции вырезания подстроки… Подстрока заканчивается крайним правым символом аргумента Строка и имеет количество символов, разное значение…

Windows, Microsoft Word и Microsoft Excel
Основная идея, заложенная в основу оболочки Windows, естественность представления информации. Наиболее важными отличительными чертами ее являются… Основными понятиями пользовательского интерфейса в среде Windows являются окно… Windows представляет собой графическую оболочку. Oт пользователя не требуется ввод директив с клавиатуры в виде…

Cоставление программы «Сбыт готовой продукции» в среде Microsoft Visual FoxPro 8.0
Приложение позволяет 1 оформлять заказы с организациями и частными лицами, с последующим оформлением накладных, счетов-фактур, счетов на предоплату.… Интуитивно понятные названия пунктов главного меню всплывающего меню делают… Разветвлнная справочная система позволяет найти ответ на интересующие вас вопросы. 1 ЭКОНОМИЧЕСКАЯ ХАРАКТЕРИСТИКА…

Функции в языке программирования на Visual Basic 2005
Понятию функции в языках программирования близко к понятию функции в математике. Например: в математике корень квадратный обозначается так… Функции вырезания левой подстроки Left ( ) В функции вырезания подстроки… Подстрока заканчивается крайним правым символом аргумента Строка и имеет количество символов, разное значение…

Реализация алгоритма вычислительного процесса на языке Microsoft Visual Basic
Разветвляющиеся вычислительные процессы...

Составление программы в Excel написанной на языке Microsoft Visual Basic for Application
Обоснование выбора 4.3 Схема алгоритма симплекс-метода 5 ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ЗАДАЧИ 5.1 Обоснование выбора языка программирования 5.2 Описание… В пояснительной записке описаны алгоритмы решения задач, подробное описание… Если говорить о среде написания программ для решения поставленных задач Microsoft Visual Basic for Application то это…

Лекция. Работа в Microsoft Excel 2010 Лекция посвящена основам вычислений с использованием формул в Microsoft Excel 2010. 1. Даны определения основных понятий, рассмотрена структура формулы
Операторы сравнения... Операторы сравнения используются для сравнения двух значений Результатом... Текстовый оператор конкатенации...

Обзор и проникновение в суть образа
Тема Обзор и проникновение в суть образа...

Тема: Обзор Палитры Компонент
Тема Обзор Палитры Компонент Страница Additional Список компонент...

0.03
Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • По категориям
  • По работам