Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пакет практичних робіт.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.04 Mб
Скачать

Приклад

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 ім'я допоміжного класу();

}

}