
- •Практична робота. Середовище розробки додаткив с#. Базові класи. Клас String.
- •Методи классу String для робот из рядками
- •Варіанти індивідуальних завдань
- •Контрольні питання
- •Практична робота 1. Проектування. Класи. Конструктори класу. Статичниі елементів класу. Спадкоємство. Частина 1.Класи. Конструктори класу. Статичні елементи класу.
- •Теоретична частина
- •Приклад
- •Хід виконання роботи
- •Індивідуальні завдання
- •Контольні запитання
- •Частина 2. Спадкоємство.
- •Теоретична частина
- •Приклад класичного спадкоємства
- •Приклад спадкоємства включення - делегування
- •Контрольні питання
- •Практична робота 2. Використання системних інтерфейсів. Створення класів походних від стандартних інтерфейсів. Частина 1. Інтерфейс iCloneable.
- •Теоретична частина
- •Приклад
- •Контрольні питання
- •Частина 2. Інтерфейси iСomparable і iСomparer.
- •Теоретична частина
- •Приклад
- •Контрольні питання
- •Частина 3. Інтерфейси iEnumerable і iEnumerator.
- •Теоретична частина
- •Інтерфейс iEnumerable
- •Приклад
- •Реалізація класу -коллекция без реалізації інтерфейсу Iеnumerator
- •Контрольні питання
- •Практическая работа 3. Моделювання в конструюванні. Використання масивів для розроблених типів. Частина 1. Користувальницький індексатор.
- •Теоретическая часть
- •Отличия между свойствами и индексаторами
- •Интерфейсы и индексаторы
- •Частина 2. Перевантаження унарних та бінарних операцій.
- •Теоретическая часть
- •Пример на перегрузку унарного оператора
- •Пример на перегрузку true и false
- •Пример на перегрузку бинарного оператора
- •Пример на перегрузку явных и неявных преобразований
- •Практична робота 4. Моделювання в конструюванні. Створення та використання класу ArrayList для розроблених типів. Частина 1. Частина 1.Створення власної колекції.
- •Теоретична частина
Приклад
using System;
namespace ObjClone
{
public class CloneApp
{
public static int Main(string[] args)
{
Point p1 = new Point(50, 50, "Fred");
Point p2 = p1; //Поверхневе копіювання
p2.x = 0;
Console.WriteLine("p1 is {0}", p1);
Console.WriteLine("p2 is {0}\n", p2);
Point p3 = new Point(100, 100, "Jane");
Point p4 = (Point)p3.Clone(); //Глибоке копіювання і явне перетворення типів
Console.WriteLine("-> Перед модифікацією");
Console.WriteLine("p3: {0}", p3);
Console.WriteLine("p4: {0}", p4);
p4.name = "XXXXX"; //Модифікація
Console.WriteLine("\n-> Після модифікації");
Console.WriteLine("p3: {0}", p3);
Console.WriteLine("p4: {0}\n", p4);
Console.Read();
return 0;
}
}
public class Point : ICloneable
{
// Поля класу
public int x, y;
public string name;
// Конструктори
public Point(){}
public Point(int x, int y)
{
this.x = x; this.y = y;
}
public Point(int x, int y, string name)
{
this.x = x;
this.y = y;
this.name=name;
}
// Реалізація методу Clone() інтерфейсу IСloneable.
public object Clone()
{
// Створення нового об'єкту.
Point copyPt = new Point();
//Копіювання всіх полів класу
copyPt.x = this.x;
copyPt.y = this.y;
copyPt.name=this.name;
return copyPt;
}
// Переобтяжений метод Object.ToString().
public override string ToString()
{
return "X: " + x + " Y: " + y + " Name: " + name ;
}
}
}
Контрольні питання
1.Що таке поверхневе копіювання.
2.Що таке глибоке копіювання.
3.Інтерфейс IСloneable.
4.Тип повертаного об'єкту методу Clone() інтерфейсу IСloneable.
5.Необхідні дії методу Clone() інтерфейсу IСloneable.
6.Методом якого базового класу є метод МеmberwiseСlone().
7.Чим відрізняється глибоке копіювання від поверхневого копіювання.
8.Яке копіювання відбувається при копіюванні змінних структурного типу.
9.Що таке явне перетворення типів.
10.Що таке переобтяжений метод.
Частина 2. Інтерфейси iСomparable і iСomparer.
Мета - Навчитися створювати порівнювані об'єкти призначеного для користувача типу, реалізовуючи інтерфейси IСomparable і IСomparer.
Завдання. Реалізувати інтерфейси Icomparable і Icomparer для призначеного для користувача типу.
Теоретична частина
Системний інтерфейс, який визначений в просторі імен System, і призначений для визначення місце об'єкту серед інших аналогічних об'єктів.
interface IСomparable
{
int Compareto(object про);
}
Для стандартного сортування об'єктів призначеного для користувача типу, клас повинен бути успадкований від інтерфейсу Icomparable і в класі повинен бути реалізований метод CompareTo
При реалізації методу CompareTo необхідно визначити, за значенням якого внутрішнього поля класу проводитиметься сортування.
Якщо у декількох об'єктів в масиві, буде однакове значення внутрішнього поля класу, по якій проводиться сортування, то вони будуть розставлені в тому ж порядку, щодо один одного, в якому вони поступили на операцію сортування.
Для сортування об'єктів призначеного для користувача типу по декількох внутрішніх полях класу використовується інтерфейс IComparer
interface IComparer
{
int Compare(object ol, object о2);
}
Для реалізації можливості сортування об'єктів по декількох елементах класу необхідно для кожного елементу класу реалізувати властивість «тільки для читання», яке повертатиме інтерфейс IComparer
public static IComparer ім'я властивості
{
get
{
return (IComparer) new ім'я допоміжного класу();
}
}