SlideShare a Scribd company logo
1 of 73
Объектно-ориентированное
программирование

Лабораторный практикум.
Вафин Р.Р.,Медведев В.И.
Л.р.№1

Структура консольного
приложения

using System;
namespace ConsoleApplication10
{
/// <summary>
/// Summary description for Class1.
/// </summary>
class Class1
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: Add code to start application here
//}}}
Л.р.№1

Структура консольного
приложения
Using сообщает компилятору, где он должен
искать классы (типы), не определенные в данном
пространстве имен.
namespace
ConsoleApplication10
мастер
предложения определяет пространство имен для
нашего приложения.
Строчка[STAThread] является атрибутом
Функция Main определена как статическая
(static) с типом возвращаемого значения void.
Л.р.№1

Консольный ввод/вывод
static void Main(string[] args)
{
Console.WriteLine("Введите ваше имя");
string str=Console.ReadLine();
Console.WriteLine("Привет "+str+"!!!");
Console.WriteLine("Введите один символ с
клавитуры");
int kod=Console.Read();
char sim=(char)kod;
Console.WriteLine("Код символа "+sim+" = "+kod);
}
Л.р.№1

Консольный ввод/вывод
Для консольного вывода также имеются два
метода:

метод Console.Write(), который выводит
параметр, указанный в качестве аргумента этой
функции,

метод Console.WriteLine(),который работает
так же, как и Console.Write(), но добавляет
символ новой строки в конец выходного текста.
Л.р.№1

Консольный ввод/вывод
Для консольного ввода также имеются два
метода:

метод Console.Read(), который возвращает
введенный символ.

метод Console.ReadLine(),который работает так
же, как и Console.Read(), но возвращает строку
введенных символов.
Л.р.№2

Классы
Классы
абстрактный
тип
определяемый пользователем.
Синтаксис объявления класса:
class имя_типа
{
// члены данные
// члены функции
}

данных,
Л.р.№2

Члены данные класса


Поле



Константы



События
Л.р.№2

Поле
Поле – любые переменные объявленные в
классе (член-переменная, содержащая
некоторое значение)
Синтаксис объявления метода:
модификатор_доступа тип имя;
Л.р.№2

Константы
Константы – поле, объявленное с
модификатором const (поле, значение
которого изменить нельзя).
Синтаксис объявления констант:
const тип имя;
Л.р.№2

Члены функций класса


Методы



Конструктор



Деструктор



Свойства



Массивы



Индексаторы
Л.р.№2

Метод
Метод — функция общего назначения.
Различают:

Методы с параметрами (модификаторы ref,
out)

Метод с переменными параметрами

Статические методы

Перегруженные методы

Сокрытые методы

Виртуальные методы

Абстрактные методы
Л.р.№2

Метод с параметрами
Методы – аналогичны функциям языка С и
синтаксически объявляются так же:
модификатор_доступа тип_значения
имя_метода(список принимаемых
параметров)
{
…//тело метода
}
Л.р.№2

Метод с параметрами
Часто необходимо, чтобы метод возвращал
более одного значения. В C# для этого
используются ключевые слова ref и out:
модификатор_доступа тип_значения
имя_метода(ref тип объект1, out тип объект2)
{
…//тело метода
}
Л.р.№2

Метод с переменными
параметрами

Метод с переменными параметрами – метод,
коорому можно передавать произвольное
количество объектов указанного типа.
Компилятор сформирует из них массив,
который и передаст в метод. Внутри метода
все параметры будут видны как массив.
модификатор_доступа тип_значения
имя_метода(param тип[] имя)
{
…//тело метода
}
Л.р.№2

Статический метод
Статически объявленные функции (методы)
считаются связанными с классом, а не с
объектом этого класса.
static модификатор_доступа тип_значения
имя_метода(список принимаемых
параметров)
{
…//тело метода
}
Л.р.№2

Особенность статических
методов
Статически объявленные методы не должны
пытаться получить доступ к не статическим
членам класса.


Статически объявленные методы не могут
быть вызваны как методы экземпляра класса.

Л.р.№2

Перегруженный метод
В С# можно объявить несколько функций с
одинаковыми именами. Функции должны
отличаться
списком
принимаемых
параметров. Список может отличаться либо
количеством, либо типом либо порядком
следования параметров. Тип возвращаемого
значения функции роли не играет. При вызове
функций транслятор по списку параметров
определяет, какая именно функция среди
одноименных, должна быть вызвана.
Л.р.№2

Сокрытый метод
Если в производном классе объявить функцию с
точно таким же заголовком, что и в базовом
классе, то говорят, что новый метод сокроет
метод базового класса.
Л.р.№2

Свойства
Свойства— специфические методы класса
Объявление свойства:
модификатор_доступа тип имя_свойства
{ get {
return значение_переменной;
}
set {
значение_переменной = value;
}
}
Л.р.№2

Массивы
Массивы – объекты класса, создание которых
производится точно так же, как и объектов
ссылочного типа.
Различают:

Одномерные массивы

Многомерные массивы

Невыровненные массивы
Л.р.№2

Одномерный массив
Поскольку массивы – это объекты класса, то их
создание производится точно так же, как и
объектов ссылочного типа.
Синтакси объявления массива:
тип[] имя;
имя = new тип[размер];
или, что - то же самое:
тип[] имя = new тип[размер];
Л.р.№2

Многомерный массив
При объявлении многомерного массива в С# в
квадратных скобках через запятую перечисляют
размерность каждого измерения массива,
например:
float [, ,] ms = new float[3,2,2];
Л.р.№2

Невыровненный массив
Не выровненный массив – это внешний массив,
состоящий из внутренних массивов разной
длины:
тип[][] имя = new тип[размер][];
Л.р.№2

Индексаторы
Индексаторы – “умные” массивы
Объявление индексатора:
модификатор_доступа тип this[тип имя_индекса]
{
get {
//Возврат необходиммых данных
}
set {
//Установка необходиммых данных
}
}
Л.р.№3

Конструктор
Конструктор – специальная функция для
инициализации полей класса.
Различают:

Конструкторы по умолчанию

Статические конструкторы

Перегруженные конструкторы

Вызов конструктора из конструктора
Л.р.№3

Конструктор по умолчанию
Конструктор, объявленный без аргументов,
называется конструктором по умолчанию.
Если в классе программистом не определен
конструктор по умолчанию, то, в отсутствии
других конструкторов, компилятор создает его
сам.
Пример конструктора:
class CA{
public CA()
{ //Тело конструктора
}}
Л.р.№3

Статический конструктор
Статистический конструктор не имеет
спецификации доступа, так как он никогда не
вызывается кодом C#, а только самой средой
исполнения .NET, и вызывается он только
один раз, до создания какого-либо экземпляра
класса.
Пример конструктора:
class CA{
static public CA()
{ //Тело конструктора
}}
Л.р.№3

Конструктор с аргументами
Конструктор,
принимающий
параметры,
называется конструктором с аргументами.
Конструкторы с аргументами позволяют
разные объекты одного и того же класса поразному инициализировать.
Л.р.№3

Конструкторы и поля readonly
Классы могут содержать поля только для
чтения (readonly). Поле только для чтения –
это константное поле, значение которого
изменить нельзя. Начальное значение поля
только для чтения может быть установлено
только внутри конструктора.
Л.р.№3

Перегруженный конструктор
В С# можно объявить несколько конструкторов
в одном классе. Конструкторы должны
отличаться
списком
принимаемых
параметров. Список может отличаться либо
количеством, либо типом либо порядком
следования
параметров.
При
вызове
конструктора
транслятор
по
списку
параметров определяет, какой именно
конструктор среди одноименных, должен
быть вызван.
Л.р.№3

Вызов конструктора из
конструктора
Для сокращения повторяющего кода
инициализации в C# есть возможность вызова
конструктора из другого конструктора. Для
этого используются ключевые слова this и
base.
Л.р.№3

Деструктор
Деструктор – специальная функция для
принудительного освобождения полей класса.
Вызывается при завершении работы с объектом
класса для освобождения системных ресурсов.
Л.р.№4

Делегаты

Для передачи ссылки на
методы в качестве
параметров другим методам в язык C# введен новый
тип данных – делегат.
По своей структуре делегат – это объект, который
ссылается на метод, то есть делегат указывает на
адрес области памяти, являющейся точкой входа в
метод.
Синтаксис объявления события:
модификатор_доступа тип delegate
тип_делегата(аргументы);
тип_делегата имя = new
тип_делегата(имя_функции);
Л.р.№4

Делегаты
Делегаты реализуются как экземпляры классов,
производных
от
библиотечного
класса
System.Delegate.
Для
создания
делегата
необходимо выполнит два шага.
На первом шаге необходимо объявить делегат.
При этом сигнатура делегата должна полностью
соответствовать сигнатуре метода, который он
представляет.
Л.р.№4

Делегат
Делегат должен ссылаться на статический метод
класса СА: static int min(int x,int y), тогда
объявление делегата может
выглядеть,
следующим образом:
delegate int LpFunc(int
a,int b); На втором шаге мы должны создать
экземпляр делегата для хранения сведения о
представляемом им методе: LpFunc pfnk = new
LpFunk(CA.min);
Экземпляр делегата может
ссылаться на любой статический метод или
метод объекта любого класса, при условии, что
сигнатура метода полностью соответствует
сигнатуре делегата.
Л.р.№4

События
С помощью событий приложения Windows в С#
получают уведомление, что что-то произошло.
ОС Windows вырабатывает несколько сот
сообщений, уведомляющих приложение о
происходящем. Сообщения Windows относятся к
низкоуровневым структурам языка С. В С#
сообщения ОС оборачиваются
высокоуровневым каркасом, в котором события
являются объектами, призванными упростить
задачу программиста по обработке сообщений
Windows.
Л.р.№4

События
Обработчик события определяется делегатом.
Согласно сигнатуре обработчика события
делегат должен принимать два параметра и
выглядеть следующим образом:
public delegate void ChangeEventHandle(object
source,ChangeEventArgs e);
Л.р.№4

События
События – являются членами класса,
позволяющие объекту класса информировать
клиента класса об изменениях (событиях),
произошедших при выполнении кода.
Синтаксис объявления события:
модификатор_доступа тип delegate
тип_делегата(аргументы);
модификатор_доступа event тип_делегата
имя_события;
Л.р.№5

Windows-приложение
Пространство имен System. Windows. Forms
содержит все классы для создания
пользовательских приложений под Windows.
Каждое приложение Windows представляет
собой объект класса, являющийся производным
от System. Windows. Forms.Form.
Л.р.№5

Технология быстрой разработки
приложений RAD






Создание элементов управления и задание их
свойств
При определении свойств объекта мастер
приложения добавляет для каждого элемента
управления свойство TabIndex
В классе формы мастером создается закрытый
объект контейнерного типа
Л.р.№5

Технология быстрой разработки
приложений RAD




Мастер приложения в классе формы
производит переопределение виртуальной
функции Dispose() базового класса
Добавление
элементов
на
осуществляется путем вызова
Controls.AddRange()

форму
функции
Л.р.№5

Объекты управления

Среда разработки windows-приложение богата
встроенными объектами управления, такими как
кнопки, редакторы, выпадающие списки и т.п.
Л.р.№5

Модификаторы доступа
public – общедоступный (доступ вне класса)
protected – защищенный член, к нему могут
обращаться только члены данного класса и
производных от него классов
private – член доступен только членам данного
класса (производным классам он не доступен)
internal – член доступен только в пределах
данной сборки и нигде больше
Л.р.№6

Графические примитивы


точки (координат) − Point и PointF



размера − Size и SizeF

прямоугольных областей − Rectangle и
RectangleF.

Л.р.№6

Структура Size
Структура Size предназначена для хранения
ширины и высоты объекта и имеет, для этого,
соответствующие открытые свойства Width и
Height, доступные как для записи, так и для
чтения. Для создания объекта Size с нулевыми
значениями Width и Height с помощью
конструктора по умолчанию, используется
следующую запись:
Size sz = new Size();
Л.р.№6

Структура Point
Структура Point содержит открытые свойства X
и Y целого типа, доступные, как для записи, так
и для чтения.
Для создания точки “pt” можно
использовать конструктор по умолчанию:
Point pt = new Point();
Л.р.№6

Структура Rectangle
Структура предназначена для определения
координат и размера прямоугольника. Для
хранения и изменения координат используются
свойства, доступные для записи и чтения.
Л.р.№6

Представление цвета
Представление цвета осуществляется с помощью
экземпляров структуры System.Drawing.Color.
Для задания цвета используется статический
метод класса:
public static Color.FromArgb( int red, int green, int
blue);
Л.р.№6

Кисти
Кисти
описываются
объектами
классов,
производных от класса System.Drawing.Brush.
Класс Brush является абстрактным классом, то
есть нельзя создать объект этого класса.
Сплошные кисти создаются как экземпляры
класса System.Drawing.SolidBrush, например:
Brush br2 = new SolidBrush(Color.Magenta);
Brush br3 = new
SolidBrush(Color.FromArgb(200,10,120));
Л.р.№6

Перья
Перья описываются классом
System.Drawing.Pen. В классе
System.Drawing.Pens содержится множество
статических свойств, описывающих перья с
интернет цветом и толщиной в один пиксель.
Создание таких перьев выглядит следующим
образом:
Pen pn6 = Pens.Brown;
Pen pn7 = Pens.Magenta;
Л.р.№6

Интерфейс GDI+
Разработчики среды .NET - предлагают новый
интерфейс графического устройства - GDI+.
GDI+ - представляет по сути дела объектноориентированную оболочку GDI с новыми
свойствами и при этом, если верить заявлению
компании
Microsoft,
удалось
повысить
быстродействие системы.
Л.р.№6

Рисование линий и фигур
Контекст устройства в среде .NET
инкапсулирован («завернут») в базовом классе
System.Drawing.Graphics. Для создания объекта
класса Graphics необходимо использовать
метод CreateGraphics(), возвращающий ссылку
на объект класса Graphics и затем через данный
объект рисовать объекты:
Graphics dc = CreateGraphics();
dc.DrawRectangle(Pens.OrangeRed,5,10,25,45);
Л.р.№6

Рисование текста
Для рисования текста используют
перегруженный метод DrawString.Для вывода
текста необходимо задать тип и размер шрифта,
кисть и координаты текста. Например:
Font fnt = new Font("Arial",10); //Шрифт
Arial, размер 10
dc.DrawString("Привет!",fnt,
Brushes.Green,10,20);
Л.р.№6

Рисование изображений
Вывод изображений осуществяется с помощью
класса Image:
Graphics g = e.Graphics;
Image curImage =
Image.FromFile("имя_изображения");
g.DrawImage(curImage, 10, 10);
Л.р.№6

Рисование анимации
Для вывода анимаций использется класс Animate
и Image. Создается объект класса Image, в
который загружается GIF изображение. Далее с
помощью встроенных событий смены кадра
происходит перерисовка изображения.
Л.р.№6

Перерисовка приложения
Восстановлением графики и текста должно
заниматься само приложение. Операционная
система в необходимых случаях вырабатывает
сообщение (событие Paint), которое «говорит»,
что окно приложения не корректно и его
необходимо перерисовать. Перерисовка окна
должна происходить по событию Paint.
Л.р.№7

Создание меню
Для создания меню и контекстного меню
необходимо перенести из ToolBox на
поверхность формы MainMenu и ContextMenu.

Необходимо добавить в пункты «большой» и
«маленький». Для этого выделяем mainMenu1 и
добавляем данные пункты.

В контекстное меню contextMenu1 добавляем
пункты «красный» и «синий» аналогичным
способом.

Л.р.№7

Создание меню
Создадим переменные, с которыми связаны все
изменения прямоугольника:
private int width;
private int height;
private Color myColor;

Инициализируем их в конструкторе Form1():
public Form1() {
InitializeComponent();
myColor = Color.Red;
width = 10;
height = 10; }

Л.р.№7

Создание меню
В свойствах формы создадим, методобработчик события Paint и отредактируем его,
чтобы он имел вид:
private void Form1_Paint(object sender,
System.Windows.Forms.PaintEventArgs e)
{
Graphics dc = e.Graphics;
Pen myPen = new Pen(myColor);


dc.DrawRectangle(myPen,50,50,width,height);
}
Л.р.№7

Создание меню
Выделим mainMenu1 и двойным щелчком
мыши на пункте “Большой” создадим методобработчик выбора данного пункта.
Отредактируем тело метода, после чего оно
должно иметь вид:
private void menuItem2_Click(object
sender, System.EventArgs e)
{
width = 100;
height = 100;
Invalidate();
}

Л.р.№7

Создание меню
Аналогично для пункта “Маленький”:
private void menuItem3_Click(object
sender, System.EventArgs e)
{
width = 10;
height = 10;
Invalidate();


}
Л.р.№7

Создание меню
Для пункта contextMenu1 “Красный”:



private void menuItem4_Click(object
sender, System.EventArgs e)
{
myColor = Color.Red;
Invalidate();
}
Л.р.№7

Создание меню
Для contextMenu1 “Синий”:



private void menuItem5_Click(object
sender, System.EventArgs e)
{
myColor = Color.Blue;
Invalidate();
}
Л.р.№7

Создание меню
Для вывода контекстного меню на экран в
свойствах формы создаем метод-обработчик
события нажатия клавиши мыши, после
редактирования метод должен иметь вид:
private void Form1_MouseDown(object sender,
System.Windows.Forms.MouseEventArgs e)
{
Point myPoint = new Point(e.X,e.Y);
if(e.Button.ToString() == "Right")
contextMenu1.Show(this,myPoint);
}

Л.р.№8

Потоки
Выполнение кода в С# всегда начинается с
метода Main. Метод Main - образует главный
поток приложения. Поток представляет собой
последовательность операций исполняемых в
программе. Главный поток может запустить
несколько подчиненных или говорят рабочих
потоков.
Л.р.№8

Потоки

Многопоточная система инкапсулирована в
класс Thread. Данный класс объявлен как
запечатанный (sealed) класс, то есть от него
нельзя породить новый класс. В классе Thread
определено ряд свойств и методов для
управления потоками.
Л.р.№8

Создание потока
Для создания потока необходимо создать объект
класса Thread.
Один из конструкторов этого класса имеет
следующий вид:
public Thread ( ThreadStart start)
Л.р.№8

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

Остановка и возобновление
потока

Запущенный на выполнение поток может быть
остановлен путем вызова метода Suspend(), а
возобновление выполнения – путем вызова
метода Resume()
Л.р.№8

Синхронизация потоков

Синхронизацией работы потоков называется
обеспечение корректной работы нескольких
потоков с общими (разделяемыми) данными или
ресурсами.
Л.р.№8

Синхронизация потоков

Синхронизация
обеспечивается
путем
организации монопольного доступа одного из
потоков на время работы с разделяемыми
ресурсами,
и
блокирования
доступа
к
разделяемым ресурсам на это время со стороны
других потоков.
Л.р.№8

Синхронизация потоков

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

More Related Content

What's hot

Автоматическая генерация тестов по комментариям к программному коду
Автоматическая генерация тестов по комментариям к программному кодуАвтоматическая генерация тестов по комментариям к программному коду
Автоматическая генерация тестов по комментариям к программному кодуAlexey Noskov
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Javametaform
 
C++ осень 2013 лекция 9
C++ осень 2013 лекция 9C++ осень 2013 лекция 9
C++ осень 2013 лекция 9Technopark
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.Igor Shkulipa
 
Работа с БД в Java
Работа с БД в JavaРабота с БД в Java
Работа с БД в Javametaform
 
Vba программы
Vba программыVba программы
Vba программыLidiKashka
 
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs ReflectionRoslyn API: SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs ReflectionDenis Tsvettsih
 
C++ осень 2013 лекция 5
C++ осень 2013 лекция 5C++ осень 2013 лекция 5
C++ осень 2013 лекция 5Technopark
 
Lec 2 Java
Lec 2 JavaLec 2 Java
Lec 2 Javaitc73
 
работа с потоками ввода вывода
работа с потоками ввода выводаработа с потоками ввода вывода
работа с потоками ввода выводаmetaform
 
Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.Unguryan Vitaliy
 

What's hot (14)

Автоматическая генерация тестов по комментариям к программному коду
Автоматическая генерация тестов по комментариям к программному кодуАвтоматическая генерация тестов по комментариям к программному коду
Автоматическая генерация тестов по комментариям к программному коду
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
C++ осень 2013 лекция 9
C++ осень 2013 лекция 9C++ осень 2013 лекция 9
C++ осень 2013 лекция 9
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.
 
Работа с БД в Java
Работа с БД в JavaРабота с БД в Java
Работа с БД в Java
 
Vba программы
Vba программыVba программы
Vba программы
 
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs ReflectionRoslyn API: SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
 
лек5 6
лек5 6лек5 6
лек5 6
 
C++ осень 2013 лекция 5
C++ осень 2013 лекция 5C++ осень 2013 лекция 5
C++ осень 2013 лекция 5
 
Lec 2 Java
Lec 2 JavaLec 2 Java
Lec 2 Java
 
java 8
java 8java 8
java 8
 
работа с потоками ввода вывода
работа с потоками ввода выводаработа с потоками ввода вывода
работа с потоками ввода вывода
 
Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.
 
Lec 2
Lec 2Lec 2
Lec 2
 

Viewers also liked

слайды к лекции 9
слайды к лекции 9слайды к лекции 9
слайды к лекции 9student_kai
 
лекция № 5
лекция № 5лекция № 5
лекция № 5student_kai
 
презентация к лекц 1
презентация к лекц 1презентация к лекц 1
презентация к лекц 1student_kai
 
физика горения06
физика горения06физика горения06
физика горения06student_kai
 
слайды клекции №1
слайды клекции №1слайды клекции №1
слайды клекции №1student_kai
 
презентация 21
презентация 21презентация 21
презентация 21student_kai
 
презентация лабораторных работ. часть 2
презентация лабораторных работ. часть 2презентация лабораторных работ. часть 2
презентация лабораторных работ. часть 2student_kai
 
лекция № 7
лекция № 7лекция № 7
лекция № 7student_kai
 
презентация лекции №5
презентация лекции №5презентация лекции №5
презентация лекции №5student_kai
 

Viewers also liked (20)

п3
п3п3
п3
 
лекция 1
лекция 1лекция 1
лекция 1
 
лекция 15
лекция 15лекция 15
лекция 15
 
п2 14
п2 14п2 14
п2 14
 
слайды к лекции 9
слайды к лекции 9слайды к лекции 9
слайды к лекции 9
 
лаб3
лаб3лаб3
лаб3
 
лекция № 5
лекция № 5лекция № 5
лекция № 5
 
презентация к лекц 1
презентация к лекц 1презентация к лекц 1
презентация к лекц 1
 
лекция 15
лекция 15лекция 15
лекция 15
 
физика горения06
физика горения06физика горения06
физика горения06
 
слайды клекции №1
слайды клекции №1слайды клекции №1
слайды клекции №1
 
лекция 27
лекция 27лекция 27
лекция 27
 
презентация 21
презентация 21презентация 21
презентация 21
 
п7
п7п7
п7
 
презентация лабораторных работ. часть 2
презентация лабораторных работ. часть 2презентация лабораторных работ. часть 2
презентация лабораторных работ. часть 2
 
лекция № 7
лекция № 7лекция № 7
лекция № 7
 
презентация лекции №5
презентация лекции №5презентация лекции №5
презентация лекции №5
 
п5
п5п5
п5
 
Eiep mod1
Eiep mod1Eiep mod1
Eiep mod1
 
L6 sld
L6 sldL6 sld
L6 sld
 

Similar to презентация кметодическим указаниям к лаб. работам

C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6Technopark
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.Igor Shkulipa
 
C# Desktop. Занятие 07.
C# Desktop. Занятие 07.C# Desktop. Занятие 07.
C# Desktop. Занятие 07.Igor Shkulipa
 
презентация конспекта лекций
презентация конспекта лекцийпрезентация конспекта лекций
презентация конспекта лекцийstudent_kai
 
C++ осень 2013 лекция 7
C++ осень 2013 лекция 7C++ осень 2013 лекция 7
C++ осень 2013 лекция 7Technopark
 
особенности программирования на с++
особенности программирования на с++особенности программирования на с++
особенности программирования на с++mcroitor
 
вспомогательные алгоритмы
вспомогательные алгоритмывспомогательные алгоритмы
вспомогательные алгоритмыЕлена Ключева
 
C++ осень 2013 лекция 4
C++ осень 2013 лекция 4C++ осень 2013 лекция 4
C++ осень 2013 лекция 4Technopark
 
Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.Anton Moiseenko
 
C++ весна 2014 лекция 5
C++ весна 2014 лекция 5C++ весна 2014 лекция 5
C++ весна 2014 лекция 5Technopark
 
C++ осень 2013 лекция 3
C++ осень 2013 лекция 3C++ осень 2013 лекция 3
C++ осень 2013 лекция 3Technopark
 
введение
введениевведение
введениеanxesenpa
 
углубленное программирование на C++. лекция no.5 [4.0]
углубленное программирование на C++. лекция no.5 [4.0]углубленное программирование на C++. лекция no.5 [4.0]
углубленное программирование на C++. лекция no.5 [4.0]Technopark
 
Android - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, genericsAndroid - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, genericsNoveo
 
паттерны программирования
паттерны программированияпаттерны программирования
паттерны программированияguestfc8ae0
 
Погружение в Dart
Погружение в DartПогружение в Dart
Погружение в DartSergey Penkovsky
 

Similar to презентация кметодическим указаниям к лаб. работам (20)

Классы и объекты С#
Классы и объекты С#Классы и объекты С#
Классы и объекты С#
 
C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.
 
C# Desktop. Занятие 07.
C# Desktop. Занятие 07.C# Desktop. Занятие 07.
C# Desktop. Занятие 07.
 
презентация конспекта лекций
презентация конспекта лекцийпрезентация конспекта лекций
презентация конспекта лекций
 
C++ осень 2013 лекция 7
C++ осень 2013 лекция 7C++ осень 2013 лекция 7
C++ осень 2013 лекция 7
 
Java. Методы
Java. Методы Java. Методы
Java. Методы
 
особенности программирования на с++
особенности программирования на с++особенности программирования на с++
особенности программирования на с++
 
вспомогательные алгоритмы
вспомогательные алгоритмывспомогательные алгоритмы
вспомогательные алгоритмы
 
C++ осень 2013 лекция 4
C++ осень 2013 лекция 4C++ осень 2013 лекция 4
C++ осень 2013 лекция 4
 
Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.
 
C++ весна 2014 лекция 5
C++ весна 2014 лекция 5C++ весна 2014 лекция 5
C++ весна 2014 лекция 5
 
C++ осень 2013 лекция 3
C++ осень 2013 лекция 3C++ осень 2013 лекция 3
C++ осень 2013 лекция 3
 
лек11 5
лек11 5лек11 5
лек11 5
 
введение
введениевведение
введение
 
углубленное программирование на C++. лекция no.5 [4.0]
углубленное программирование на C++. лекция no.5 [4.0]углубленное программирование на C++. лекция no.5 [4.0]
углубленное программирование на C++. лекция no.5 [4.0]
 
Особенности C#
Особенности C#Особенности C#
Особенности C#
 
Android - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, genericsAndroid - 02 - annotations, exceptions, io, generics
Android - 02 - annotations, exceptions, io, generics
 
паттерны программирования
паттерны программированияпаттерны программирования
паттерны программирования
 
Погружение в Dart
Погружение в DartПогружение в Dart
Погружение в Dart
 

More from student_kai

презентация
презентацияпрезентация
презентацияstudent_kai
 
презентации продолжение банкета
презентации продолжение банкетапрезентации продолжение банкета
презентации продолжение банкетаstudent_kai
 
основы программирования на языке C
основы программирования на языке Cосновы программирования на языке C
основы программирования на языке Cstudent_kai
 
презентация курсовой работы
презентация курсовой работыпрезентация курсовой работы
презентация курсовой работыstudent_kai
 
лекция№34
лекция№34лекция№34
лекция№34student_kai
 
лекция№32
лекция№32лекция№32
лекция№32student_kai
 
лекция№33
лекция№33лекция№33
лекция№33student_kai
 
лекция№31
лекция№31лекция№31
лекция№31student_kai
 
лекция№30
лекция№30лекция№30
лекция№30student_kai
 
лекция№29
лекция№29лекция№29
лекция№29student_kai
 
лекция№28
лекция№28лекция№28
лекция№28student_kai
 
лекция№27
лекция№27лекция№27
лекция№27student_kai
 
лекция№26
лекция№26лекция№26
лекция№26student_kai
 
лекция№25
лекция№25лекция№25
лекция№25student_kai
 
лекция№25
лекция№25лекция№25
лекция№25student_kai
 
лекция№24
лекция№24лекция№24
лекция№24student_kai
 
лекция№23
лекция№23лекция№23
лекция№23student_kai
 
лекция№22
лекция№22лекция№22
лекция№22student_kai
 
лекция№21
лекция№21лекция№21
лекция№21student_kai
 
лекция№20
лекция№20лекция№20
лекция№20student_kai
 

More from student_kai (20)

презентация
презентацияпрезентация
презентация
 
презентации продолжение банкета
презентации продолжение банкетапрезентации продолжение банкета
презентации продолжение банкета
 
основы программирования на языке C
основы программирования на языке Cосновы программирования на языке C
основы программирования на языке C
 
презентация курсовой работы
презентация курсовой работыпрезентация курсовой работы
презентация курсовой работы
 
лекция№34
лекция№34лекция№34
лекция№34
 
лекция№32
лекция№32лекция№32
лекция№32
 
лекция№33
лекция№33лекция№33
лекция№33
 
лекция№31
лекция№31лекция№31
лекция№31
 
лекция№30
лекция№30лекция№30
лекция№30
 
лекция№29
лекция№29лекция№29
лекция№29
 
лекция№28
лекция№28лекция№28
лекция№28
 
лекция№27
лекция№27лекция№27
лекция№27
 
лекция№26
лекция№26лекция№26
лекция№26
 
лекция№25
лекция№25лекция№25
лекция№25
 
лекция№25
лекция№25лекция№25
лекция№25
 
лекция№24
лекция№24лекция№24
лекция№24
 
лекция№23
лекция№23лекция№23
лекция№23
 
лекция№22
лекция№22лекция№22
лекция№22
 
лекция№21
лекция№21лекция№21
лекция№21
 
лекция№20
лекция№20лекция№20
лекция№20
 

презентация кметодическим указаниям к лаб. работам

  • 2. Л.р.№1 Структура консольного приложения using System; namespace ConsoleApplication10 { /// <summary> /// Summary description for Class1. /// </summary> class Class1 { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main(string[] args) { // // TODO: Add code to start application here //}}}
  • 3. Л.р.№1 Структура консольного приложения Using сообщает компилятору, где он должен искать классы (типы), не определенные в данном пространстве имен. namespace ConsoleApplication10 мастер предложения определяет пространство имен для нашего приложения. Строчка[STAThread] является атрибутом Функция Main определена как статическая (static) с типом возвращаемого значения void.
  • 4. Л.р.№1 Консольный ввод/вывод static void Main(string[] args) { Console.WriteLine("Введите ваше имя"); string str=Console.ReadLine(); Console.WriteLine("Привет "+str+"!!!"); Console.WriteLine("Введите один символ с клавитуры"); int kod=Console.Read(); char sim=(char)kod; Console.WriteLine("Код символа "+sim+" = "+kod); }
  • 5. Л.р.№1 Консольный ввод/вывод Для консольного вывода также имеются два метода:  метод Console.Write(), который выводит параметр, указанный в качестве аргумента этой функции,  метод Console.WriteLine(),который работает так же, как и Console.Write(), но добавляет символ новой строки в конец выходного текста.
  • 6. Л.р.№1 Консольный ввод/вывод Для консольного ввода также имеются два метода:  метод Console.Read(), который возвращает введенный символ.  метод Console.ReadLine(),который работает так же, как и Console.Read(), но возвращает строку введенных символов.
  • 7. Л.р.№2 Классы Классы абстрактный тип определяемый пользователем. Синтаксис объявления класса: class имя_типа { // члены данные // члены функции } данных,
  • 9. Л.р.№2 Поле Поле – любые переменные объявленные в классе (член-переменная, содержащая некоторое значение) Синтаксис объявления метода: модификатор_доступа тип имя;
  • 10. Л.р.№2 Константы Константы – поле, объявленное с модификатором const (поле, значение которого изменить нельзя). Синтаксис объявления констант: const тип имя;
  • 12. Л.р.№2 Метод Метод — функция общего назначения. Различают:  Методы с параметрами (модификаторы ref, out)  Метод с переменными параметрами  Статические методы  Перегруженные методы  Сокрытые методы  Виртуальные методы  Абстрактные методы
  • 13. Л.р.№2 Метод с параметрами Методы – аналогичны функциям языка С и синтаксически объявляются так же: модификатор_доступа тип_значения имя_метода(список принимаемых параметров) { …//тело метода }
  • 14. Л.р.№2 Метод с параметрами Часто необходимо, чтобы метод возвращал более одного значения. В C# для этого используются ключевые слова ref и out: модификатор_доступа тип_значения имя_метода(ref тип объект1, out тип объект2) { …//тело метода }
  • 15. Л.р.№2 Метод с переменными параметрами Метод с переменными параметрами – метод, коорому можно передавать произвольное количество объектов указанного типа. Компилятор сформирует из них массив, который и передаст в метод. Внутри метода все параметры будут видны как массив. модификатор_доступа тип_значения имя_метода(param тип[] имя) { …//тело метода }
  • 16. Л.р.№2 Статический метод Статически объявленные функции (методы) считаются связанными с классом, а не с объектом этого класса. static модификатор_доступа тип_значения имя_метода(список принимаемых параметров) { …//тело метода }
  • 17. Л.р.№2 Особенность статических методов Статически объявленные методы не должны пытаться получить доступ к не статическим членам класса.  Статически объявленные методы не могут быть вызваны как методы экземпляра класса. 
  • 18. Л.р.№2 Перегруженный метод В С# можно объявить несколько функций с одинаковыми именами. Функции должны отличаться списком принимаемых параметров. Список может отличаться либо количеством, либо типом либо порядком следования параметров. Тип возвращаемого значения функции роли не играет. При вызове функций транслятор по списку параметров определяет, какая именно функция среди одноименных, должна быть вызвана.
  • 19. Л.р.№2 Сокрытый метод Если в производном классе объявить функцию с точно таким же заголовком, что и в базовом классе, то говорят, что новый метод сокроет метод базового класса.
  • 20. Л.р.№2 Свойства Свойства— специфические методы класса Объявление свойства: модификатор_доступа тип имя_свойства { get { return значение_переменной; } set { значение_переменной = value; } }
  • 21. Л.р.№2 Массивы Массивы – объекты класса, создание которых производится точно так же, как и объектов ссылочного типа. Различают:  Одномерные массивы  Многомерные массивы  Невыровненные массивы
  • 22. Л.р.№2 Одномерный массив Поскольку массивы – это объекты класса, то их создание производится точно так же, как и объектов ссылочного типа. Синтакси объявления массива: тип[] имя; имя = new тип[размер]; или, что - то же самое: тип[] имя = new тип[размер];
  • 23. Л.р.№2 Многомерный массив При объявлении многомерного массива в С# в квадратных скобках через запятую перечисляют размерность каждого измерения массива, например: float [, ,] ms = new float[3,2,2];
  • 24. Л.р.№2 Невыровненный массив Не выровненный массив – это внешний массив, состоящий из внутренних массивов разной длины: тип[][] имя = new тип[размер][];
  • 25. Л.р.№2 Индексаторы Индексаторы – “умные” массивы Объявление индексатора: модификатор_доступа тип this[тип имя_индекса] { get { //Возврат необходиммых данных } set { //Установка необходиммых данных } }
  • 26. Л.р.№3 Конструктор Конструктор – специальная функция для инициализации полей класса. Различают:  Конструкторы по умолчанию  Статические конструкторы  Перегруженные конструкторы  Вызов конструктора из конструктора
  • 27. Л.р.№3 Конструктор по умолчанию Конструктор, объявленный без аргументов, называется конструктором по умолчанию. Если в классе программистом не определен конструктор по умолчанию, то, в отсутствии других конструкторов, компилятор создает его сам. Пример конструктора: class CA{ public CA() { //Тело конструктора }}
  • 28. Л.р.№3 Статический конструктор Статистический конструктор не имеет спецификации доступа, так как он никогда не вызывается кодом C#, а только самой средой исполнения .NET, и вызывается он только один раз, до создания какого-либо экземпляра класса. Пример конструктора: class CA{ static public CA() { //Тело конструктора }}
  • 29. Л.р.№3 Конструктор с аргументами Конструктор, принимающий параметры, называется конструктором с аргументами. Конструкторы с аргументами позволяют разные объекты одного и того же класса поразному инициализировать.
  • 30. Л.р.№3 Конструкторы и поля readonly Классы могут содержать поля только для чтения (readonly). Поле только для чтения – это константное поле, значение которого изменить нельзя. Начальное значение поля только для чтения может быть установлено только внутри конструктора.
  • 31. Л.р.№3 Перегруженный конструктор В С# можно объявить несколько конструкторов в одном классе. Конструкторы должны отличаться списком принимаемых параметров. Список может отличаться либо количеством, либо типом либо порядком следования параметров. При вызове конструктора транслятор по списку параметров определяет, какой именно конструктор среди одноименных, должен быть вызван.
  • 32. Л.р.№3 Вызов конструктора из конструктора Для сокращения повторяющего кода инициализации в C# есть возможность вызова конструктора из другого конструктора. Для этого используются ключевые слова this и base.
  • 33. Л.р.№3 Деструктор Деструктор – специальная функция для принудительного освобождения полей класса. Вызывается при завершении работы с объектом класса для освобождения системных ресурсов.
  • 34. Л.р.№4 Делегаты Для передачи ссылки на методы в качестве параметров другим методам в язык C# введен новый тип данных – делегат. По своей структуре делегат – это объект, который ссылается на метод, то есть делегат указывает на адрес области памяти, являющейся точкой входа в метод. Синтаксис объявления события: модификатор_доступа тип delegate тип_делегата(аргументы); тип_делегата имя = new тип_делегата(имя_функции);
  • 35. Л.р.№4 Делегаты Делегаты реализуются как экземпляры классов, производных от библиотечного класса System.Delegate. Для создания делегата необходимо выполнит два шага. На первом шаге необходимо объявить делегат. При этом сигнатура делегата должна полностью соответствовать сигнатуре метода, который он представляет.
  • 36. Л.р.№4 Делегат Делегат должен ссылаться на статический метод класса СА: static int min(int x,int y), тогда объявление делегата может выглядеть, следующим образом: delegate int LpFunc(int a,int b); На втором шаге мы должны создать экземпляр делегата для хранения сведения о представляемом им методе: LpFunc pfnk = new LpFunk(CA.min); Экземпляр делегата может ссылаться на любой статический метод или метод объекта любого класса, при условии, что сигнатура метода полностью соответствует сигнатуре делегата.
  • 37. Л.р.№4 События С помощью событий приложения Windows в С# получают уведомление, что что-то произошло. ОС Windows вырабатывает несколько сот сообщений, уведомляющих приложение о происходящем. Сообщения Windows относятся к низкоуровневым структурам языка С. В С# сообщения ОС оборачиваются высокоуровневым каркасом, в котором события являются объектами, призванными упростить задачу программиста по обработке сообщений Windows.
  • 38. Л.р.№4 События Обработчик события определяется делегатом. Согласно сигнатуре обработчика события делегат должен принимать два параметра и выглядеть следующим образом: public delegate void ChangeEventHandle(object source,ChangeEventArgs e);
  • 39. Л.р.№4 События События – являются членами класса, позволяющие объекту класса информировать клиента класса об изменениях (событиях), произошедших при выполнении кода. Синтаксис объявления события: модификатор_доступа тип delegate тип_делегата(аргументы); модификатор_доступа event тип_делегата имя_события;
  • 40. Л.р.№5 Windows-приложение Пространство имен System. Windows. Forms содержит все классы для создания пользовательских приложений под Windows. Каждое приложение Windows представляет собой объект класса, являющийся производным от System. Windows. Forms.Form.
  • 41. Л.р.№5 Технология быстрой разработки приложений RAD    Создание элементов управления и задание их свойств При определении свойств объекта мастер приложения добавляет для каждого элемента управления свойство TabIndex В классе формы мастером создается закрытый объект контейнерного типа
  • 42. Л.р.№5 Технология быстрой разработки приложений RAD   Мастер приложения в классе формы производит переопределение виртуальной функции Dispose() базового класса Добавление элементов на осуществляется путем вызова Controls.AddRange() форму функции
  • 43. Л.р.№5 Объекты управления Среда разработки windows-приложение богата встроенными объектами управления, такими как кнопки, редакторы, выпадающие списки и т.п.
  • 44. Л.р.№5 Модификаторы доступа public – общедоступный (доступ вне класса) protected – защищенный член, к нему могут обращаться только члены данного класса и производных от него классов private – член доступен только членам данного класса (производным классам он не доступен) internal – член доступен только в пределах данной сборки и нигде больше
  • 45. Л.р.№6 Графические примитивы  точки (координат) − Point и PointF  размера − Size и SizeF прямоугольных областей − Rectangle и RectangleF. 
  • 46. Л.р.№6 Структура Size Структура Size предназначена для хранения ширины и высоты объекта и имеет, для этого, соответствующие открытые свойства Width и Height, доступные как для записи, так и для чтения. Для создания объекта Size с нулевыми значениями Width и Height с помощью конструктора по умолчанию, используется следующую запись: Size sz = new Size();
  • 47. Л.р.№6 Структура Point Структура Point содержит открытые свойства X и Y целого типа, доступные, как для записи, так и для чтения. Для создания точки “pt” можно использовать конструктор по умолчанию: Point pt = new Point();
  • 48. Л.р.№6 Структура Rectangle Структура предназначена для определения координат и размера прямоугольника. Для хранения и изменения координат используются свойства, доступные для записи и чтения.
  • 49. Л.р.№6 Представление цвета Представление цвета осуществляется с помощью экземпляров структуры System.Drawing.Color. Для задания цвета используется статический метод класса: public static Color.FromArgb( int red, int green, int blue);
  • 50. Л.р.№6 Кисти Кисти описываются объектами классов, производных от класса System.Drawing.Brush. Класс Brush является абстрактным классом, то есть нельзя создать объект этого класса. Сплошные кисти создаются как экземпляры класса System.Drawing.SolidBrush, например: Brush br2 = new SolidBrush(Color.Magenta); Brush br3 = new SolidBrush(Color.FromArgb(200,10,120));
  • 51. Л.р.№6 Перья Перья описываются классом System.Drawing.Pen. В классе System.Drawing.Pens содержится множество статических свойств, описывающих перья с интернет цветом и толщиной в один пиксель. Создание таких перьев выглядит следующим образом: Pen pn6 = Pens.Brown; Pen pn7 = Pens.Magenta;
  • 52. Л.р.№6 Интерфейс GDI+ Разработчики среды .NET - предлагают новый интерфейс графического устройства - GDI+. GDI+ - представляет по сути дела объектноориентированную оболочку GDI с новыми свойствами и при этом, если верить заявлению компании Microsoft, удалось повысить быстродействие системы.
  • 53. Л.р.№6 Рисование линий и фигур Контекст устройства в среде .NET инкапсулирован («завернут») в базовом классе System.Drawing.Graphics. Для создания объекта класса Graphics необходимо использовать метод CreateGraphics(), возвращающий ссылку на объект класса Graphics и затем через данный объект рисовать объекты: Graphics dc = CreateGraphics(); dc.DrawRectangle(Pens.OrangeRed,5,10,25,45);
  • 54. Л.р.№6 Рисование текста Для рисования текста используют перегруженный метод DrawString.Для вывода текста необходимо задать тип и размер шрифта, кисть и координаты текста. Например: Font fnt = new Font("Arial",10); //Шрифт Arial, размер 10 dc.DrawString("Привет!",fnt, Brushes.Green,10,20);
  • 55. Л.р.№6 Рисование изображений Вывод изображений осуществяется с помощью класса Image: Graphics g = e.Graphics; Image curImage = Image.FromFile("имя_изображения"); g.DrawImage(curImage, 10, 10);
  • 56. Л.р.№6 Рисование анимации Для вывода анимаций использется класс Animate и Image. Создается объект класса Image, в который загружается GIF изображение. Далее с помощью встроенных событий смены кадра происходит перерисовка изображения.
  • 57. Л.р.№6 Перерисовка приложения Восстановлением графики и текста должно заниматься само приложение. Операционная система в необходимых случаях вырабатывает сообщение (событие Paint), которое «говорит», что окно приложения не корректно и его необходимо перерисовать. Перерисовка окна должна происходить по событию Paint.
  • 58. Л.р.№7 Создание меню Для создания меню и контекстного меню необходимо перенести из ToolBox на поверхность формы MainMenu и ContextMenu.  Необходимо добавить в пункты «большой» и «маленький». Для этого выделяем mainMenu1 и добавляем данные пункты.  В контекстное меню contextMenu1 добавляем пункты «красный» и «синий» аналогичным способом. 
  • 59. Л.р.№7 Создание меню Создадим переменные, с которыми связаны все изменения прямоугольника: private int width; private int height; private Color myColor;  Инициализируем их в конструкторе Form1(): public Form1() { InitializeComponent(); myColor = Color.Red; width = 10; height = 10; } 
  • 60. Л.р.№7 Создание меню В свойствах формы создадим, методобработчик события Paint и отредактируем его, чтобы он имел вид: private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { Graphics dc = e.Graphics; Pen myPen = new Pen(myColor);  dc.DrawRectangle(myPen,50,50,width,height); }
  • 61. Л.р.№7 Создание меню Выделим mainMenu1 и двойным щелчком мыши на пункте “Большой” создадим методобработчик выбора данного пункта. Отредактируем тело метода, после чего оно должно иметь вид: private void menuItem2_Click(object sender, System.EventArgs e) { width = 100; height = 100; Invalidate(); } 
  • 62. Л.р.№7 Создание меню Аналогично для пункта “Маленький”: private void menuItem3_Click(object sender, System.EventArgs e) { width = 10; height = 10; Invalidate();  }
  • 63. Л.р.№7 Создание меню Для пункта contextMenu1 “Красный”:  private void menuItem4_Click(object sender, System.EventArgs e) { myColor = Color.Red; Invalidate(); }
  • 64. Л.р.№7 Создание меню Для contextMenu1 “Синий”:  private void menuItem5_Click(object sender, System.EventArgs e) { myColor = Color.Blue; Invalidate(); }
  • 65. Л.р.№7 Создание меню Для вывода контекстного меню на экран в свойствах формы создаем метод-обработчик события нажатия клавиши мыши, после редактирования метод должен иметь вид: private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { Point myPoint = new Point(e.X,e.Y); if(e.Button.ToString() == "Right") contextMenu1.Show(this,myPoint); } 
  • 66. Л.р.№8 Потоки Выполнение кода в С# всегда начинается с метода Main. Метод Main - образует главный поток приложения. Поток представляет собой последовательность операций исполняемых в программе. Главный поток может запустить несколько подчиненных или говорят рабочих потоков.
  • 67. Л.р.№8 Потоки Многопоточная система инкапсулирована в класс Thread. Данный класс объявлен как запечатанный (sealed) класс, то есть от него нельзя породить новый класс. В классе Thread определено ряд свойств и методов для управления потоками.
  • 68. Л.р.№8 Создание потока Для создания потока необходимо создать объект класса Thread. Один из конструкторов этого класса имеет следующий вид: public Thread ( ThreadStart start)
  • 69. Л.р.№8 Приоритеты потоков Каждый поток имеет определенный приоритет. Потоки с более высоким приоритетом имеют преимущество перед другими потоками и могут полностью блокировать работу потоков с более низкими приоритетами. Приоритет потока можно прочитать или изменить с помощью свойства Priority, которое является членом класса Thread.
  • 70. Л.р.№8 Остановка и возобновление потока Запущенный на выполнение поток может быть остановлен путем вызова метода Suspend(), а возобновление выполнения – путем вызова метода Resume()
  • 71. Л.р.№8 Синхронизация потоков Синхронизацией работы потоков называется обеспечение корректной работы нескольких потоков с общими (разделяемыми) данными или ресурсами.
  • 72. Л.р.№8 Синхронизация потоков Синхронизация обеспечивается путем организации монопольного доступа одного из потоков на время работы с разделяемыми ресурсами, и блокирования доступа к разделяемым ресурсам на это время со стороны других потоков.
  • 73. Л.р.№8 Синхронизация потоков В основе синхронизации лежит понятие блокировки, т.е. управление доступом к некоторому блоку кода в объекте. На то время, когда объект заблокирован одним потоком, никакой другой поток не может получить доступ к блоку кода для работы с этим объектом.