Справочник от Автор24
Поделись лекцией за скидку на Автор24

Интерфейсы. Клонирование объектов на С#

  • 👀 868 просмотров
  • 📌 786 загрузок
Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Интерфейсы. Клонирование объектов на С#» pdf
Интерфейсы. Клонирование объектов на С# 1) Интерфейсы на C#. Интерфейс представляет собой аналог абстрактного класса, в котором есть только абстрактные методы. Класс реализует (implements) интерфейс, если он перегружает абстрактные методы интерфейса. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { interface Calculate { int Numbersec(); // абстрактный метод для классов, реализующих интерфейс } class Record:Calculate // реализация интерфейса Calculate { protected int min,sec; public int Numbersec() // реализованный метод в интерфейсе { return min*60+sec; } public Record(int m,int s) { min=m; sec=s; } } class Sprint:Record,Calculate // производный от Record и реализующий интерфейс { public int dec; public int Numbersec() // метод интерфейса { if (dec >= 5) return 60 * min + sec + 1; else return 60 * min + sec; } public Sprint(int m, int s, int d) : base(m, s) { 1 dec = d; } } class Program { static void Main(string[] args) { Record a = new Record(3,5); Sprint b = new Sprint(3,5,9); int m, k; m = a.Numbersec(); // вызов реализованного метода интерфейса k = b.Numbersec(); // вызов реализованного метода интерфейса Console.WriteLine("{0} {1}", m, k); Console.ReadKey(); } } } Абстрактный класс vs интерфейс на C# В абстрактном классе могут быть кроме абстрактных функции, обычные. abstract class Runner { .... string Getfam() { return Fam; } } В интерфейсах могут быть только заголовки методов. Наследоваться может только один класс, а реализовываться несколько интерфейсов(Аналог множественного наследования). C# class Sprint:Record,Calculate, Calculate2 // производный от Record и реализующий интерфейсы Calculate, Calculate2 { ............... 2 2) Клонирование объектов на C#. Встроенный интерфейс клонирования. Мелкое и глубокое копирование на C# Клонирование объекта - копирование полей объекта в другой объект. На C++ проблема присваивания динамических объектов решена перегрузкой оператора присваивания с глубоким копированием. При присваивании на c# объектов копируется ссылка. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Record { protected int min,sec; public Record(int m, int s) { min = m; sec = s; } public void Putmin(int m) { min = m; } } class Program { static void Main(string[] args) { Record a = new Record(3, 5); Record b = new Record(4, 6); a = b; // копируется ссылка b.Putmin(7); // a.min=7 } } } На C# возможно копирование по полям с использованием struct. Добавим интерфейс клонирования. 3 class Record:ICloneable // интерфейс клонирования { protected int min,sec; public Record(int m, int s) { min = m; sec = s; } public void Putmin(int m) { min = m; } public object Clone() // перегрузка метода клонирования { return new Record(min, sec); } } class Program { static void Main(string[] args) { Record a = new Record(3, 5); Record b = new Record(4, 6); a = (Record)b.Clone(); // вместо a=b b.Putmin(7); // a.min=4 } } } Мелкое клонирование. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Record { protected int min,sec; public Record(int m, int s) { min = m; sec = s; } 4 public void Putmin(int m) { min = m; } } class Sportsman : ICloneable // интерфейс клонирования { public string Fam; public Record rd; // public Sportsman(string f, int m, int s) public Sportsman(string f, Record r) { Fam = f; // rd = new Record(m, s); rd = r; } public object Clone() // перегрузка клонирования { return new Sportsman(Fam, rd); } } class Program { static void Main(string[] args) { Record r1 = new Record(3, 5); Sportsman a = new Sportsman("Иванов",r1); Record r2 = new Record(4, 6); Sportsman b = new Sportsman("Петров", r2); a = (Sportsman)b.Clone(); b.Fam = "Сидоров"; // a.Fam="Петров" b.rd.Putmin(9); // a.rd.min=9! rd – копируется ссылка } } } Глубокое клонирование. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { 5 class Record :ICloneable // интерфейс клонирования { protected int min,sec; public Record(int m, int s) { min = m; sec = s; } public void Putmin(int m) { min = m; } public int Getmin() { return min; } public int Getsec() { return sec; } public object Clone() // перегрузка метода клонирования { return new Record(min, sec); } } class Sportsman : ICloneable // интерфейс клонирования { public string Fam; public Record rd; public Sportsman(string f, int m,int s) { Fam = f; rd = new Record(m,s); } public object Clone() // перегрузка клонирования { Sportsman c = new Sportsman(Fam, rd.Getmin(),rd.Getsec()); rd = (Record)rd.Clone(); // клонирование Record return c; } } class Program { static void Main(string[] args) { Sportsman a = new Sportsman("Иванов",3,5); 6 Sportsman b = new Sportsman("Петров", 4,6); a = (Sportsman)b.Clone(); b.Fam = "Сидоров"; // a.Fam Петров b.rd.Putmin(9); // a.rd.min=4 } } } 7
«Интерфейсы. Клонирование объектов на С#» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Помощь с рефератом от нейросети
Написать ИИ
Получи помощь с рефератом от ИИ-шки
ИИ ответит за 2 минуты

Тебе могут подойти лекции

Смотреть все 588 лекций
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot