Реализация принципов ООП в .NET. Лекция 5

Содержание

Слайд 2

Константы

Константы – это постоянные значения, которые известны во время компиляции и не

Константы Константы – это постоянные значения, которые известны во время компиляции и
изменяются во время выполнения программы.
abstract Class MyClass {
public const int myConst1 = 10;
public const string myConst2 = “”; }
Console.WriteLine(MyClass.myConst1);
MyClass.myConst1 = 15; //ошибка!

Слайд 3

Статические методы

Статический метод – это метод, который не имеет доступа к полям

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

Слайд 4

Статические методы

Class Hospital()
{
public static string Complain()
{ … }
}
static void Main(string[]

Статические методы Class Hospital() { public static string Complain() { … }
args)
{
Console.WriteLine(Hospital.Complain());
}

Слайд 5

Статические переменные

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

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

Слайд 6

Статические переменные

Class Hospital()
{ private static int vizitCount ;
public Hospital() { vizitCount++; }
public int

Статические переменные Class Hospital() { private static int vizitCount ; public Hospital()
VizitCount { get; }
}
Class Class1()
{ Hospital h1 = new Hospital();
Hospital h2 = new Hospital();
Console.WriteLine(“Посетителей ” + h2.VizitCount );
}

Слайд 7

Пользовательский индексатор

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

Пользовательский индексатор Индексаторы позволяют индексировать объекты и обращаться к данным по индексу.
представляет собой слегка измененное свойство C#.
С помощью индексаторов с объектами можно работать как с массивами.

Слайд 8

Пользовательский индексатор

class Student
{
int nom; string name;
private Student[] stArray;
public Student(int

Пользовательский индексатор class Student { int nom; string name; private Student[] stArray;
ch)
{ stArray = new Student[ch]; }
public Student(int _nom, string _name)
{
nom = _nom; name = _name;
}
12 слайд
public Student this[int pos] {…} //индексатор
}

Слайд 9

Пользовательский индексатор

//индексатор класса Student:
public Student this[int pos]
{
get
{
return (stArray[pos]);
}
set

Пользовательский индексатор //индексатор класса Student: public Student this[int pos] { get {
{
stArray[pos] = value;
}
}

Слайд 10

Пользовательский индексатор

static void Main(string[] args)
{
Student st = new Student(2);

Пользовательский индексатор static void Main(string[] args) { Student st = new Student(2);
st[0] = new Student(20, "Иванов");
st[1] = new Student(25, "Сидоров");
for (int i = 0; i < 2; i++)
{
Console.WriteLine(st[i].Surname);
}
Console.ReadLine();
}

Слайд 11

Пользовательский индексатор

Можно воспользоваться foreach, для этого необходимо явно определить методы интерфейсов:
public

Пользовательский индексатор Можно воспользоваться foreach, для этого необходимо явно определить методы интерфейсов:
IEnumerator GetEnumerator()
{ return this; }
public object Current
{
get { return arrStudent[index]; }
}
int index = -1;
public bool MoveNext()
{
if (index == arrStudent.Length - 1)
{
Reset();
return false;
}
index++;
return true;
}
public void Reset()
{ index = -1; }

Слайд 12

Пользовательский индексатор

static void Main(string[] args)
{
Student st = new Student(3);
st[0] =

Пользовательский индексатор static void Main(string[] args) { Student st = new Student(3);
new Student(10, "Иванов");
st[1] = new Student(12, "Сидоров");
st[2] = new Student(15, "Петров");
foreach (Student s in st)
Console.WriteLine(s.GetName());
}

Слайд 13

Перегрузка методов

Перегрузка методов – это объявление методов в одном классе с одинаковыми

Перегрузка методов Перегрузка методов – это объявление методов в одном классе с
именами, но с различными параметрами.
Перегрузка методов относится к одному из способов реализации полиморфизма в C#.

Слайд 14

Перегрузка методов

public void Mt()
{
Console.WriteLine("Mетод Mt без параметров");
}
public

Перегрузка методов public void Mt() { Console.WriteLine("Mетод Mt без параметров"); } public
void Mt(string name, int ch)
{
Console.WriteLine("Метод Mt с параметрами: {0} {1}", name, ch);
}
Class1 cl = new Class1();
// Разные реализации вызова перегружаемого метода
cl.Mt();
cl.Mt("Иван", 10);

Слайд 15

Перегрузка операторов

Перегрузка операторов позволяет переопределить операторы С# для применения их к типам,

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

Слайд 16

Перегрузка операторов

Оператор «+»:
int a = 5;
int b = 10;
int c =

Перегрузка операторов Оператор «+»: int a = 5; int b = 10;
a + b;
Оператор «+» перегружен в классе String:
string s1 = «Привет»;
string s2 = « всем!»;
string s3 = s1 + s2;

Слайд 17

Перегрузка операторов

Пример пользовательской перегрузки оператора «+»:
class Point
{
private int x, y;
public

Перегрузка операторов Пример пользовательской перегрузки оператора «+»: class Point { private int
Point(int _x, int _y)
{
x = _x;
y = _y;
}
public static Point operator + (Point pl1, Point pl2)
{
Point newPoint = new Point(pl1.x + pl2.x, pl1.y + pl2.y);
return newPoint;
}
public override string ToString()
{
return "X=" + x + " Y=" + y;
} }

Слайд 18

Перегрузка операторов

static void Main(string[] args)
{
Point pt1 = new Point(100, 200);
Point pt2 =

Перегрузка операторов static void Main(string[] args) { Point pt1 = new Point(100,
new Point(50, 60);
Point pt3 = pt1 + pt2;
Console.WriteLine(pt3.ToString());
}

Слайд 19

Перегрузка операторов

Общая форма перегрузки унарного оператора:
public static возвращаемый_тип operator op(тип_параметра операнд)
{…}

Перегрузка операторов Общая форма перегрузки унарного оператора: public static возвращаемый_тип operator op(тип_параметра

Общая форма перегрузки бинарного оператора:
public static возвращаемый_тип operator op(тип_параметра1 операнд1, тип_параметра2 операнд2)
{ … }

Слайд 20

Перегрузка операторов

Возможность перегрузки операторов C#

Перегрузка операторов Возможность перегрузки операторов C#