Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Progi / Lesson 6 / lec6.doc
Скачиваний:
30
Добавлен:
28.03.2015
Размер:
342.53 Кб
Скачать

Icalculate.Cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication1

{

interface Icalculate // заголовок интерфейса

{

int Numbersec(); // метод, реализуемый в классах

}

}

Record.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication1

{

class Record:Icalculate // реализация интерфейса

{

public int min, sec;

public Record(int m, int s)

{

min = m;

sec = s;

}

public int Numbersec() // метод интерфейса

{

return 60 * min + sec;

}

}

}

Sprint.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication1

{

class Sprint:Record,Icalculate // производный от Record и реализующий интерфейс

{

public int dec;

public Sprint(int m,int s,int d):base(m,s) // конструктор с параметрами и вызов базового

{

dec=d;

}

public int Numbersec() // метод интерфейса

{

if (dec >= 5)

return 60 * min + sec + 1;

else

return 60 * min + sec;

}

}

}

Program.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

Record a = new Record(2, 30);

Sprint b = new Sprint(2, 30, 8);

int m, k;

m = a.Numbersec(); // вызов реализованного метода интерфейса

k = b.Numbersec(); // вызов реализованного метода интерфейса

Console.WriteLine("{0} {1}", m, k);

Console.ReadKey();

}

}

}

150 151

Клонирование объектов на C#

Record.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication1

{

class Record

{

private int min,sec;

public Record(int m, int s)

{

min = m;

sec = s;

}

public void Putmin(int m)

{

min = m;

}

}

}

Program.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication1

{

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 !!

}

}

}

Вместо присваивания клонирование объекта.

Record.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication1

{

class Record:ICloneable // интерфейс клонирования

{

private 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);

}

}

}

Program.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication1

{

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=6 !! a,b - разные в памяти!!

}

}

}

Глубокое клонирование объектов на C#

Record.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication1

{

class Record

{

public int min, sec;

public Record(int m, int s) // конструктор с параметрами

{

min = m;

sec = s;

}

}

}

Sportsman.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication1

{

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() // перегрузка клонирования

{

return new Sportsman(Fam, rd.min, rd.sec);

}

}

}

Program.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

Sportsman a = new Sportsman("Иванов", 5, 6);

Sportsman b = new Sportsman("Петров", 7, 8);

a = (Sportsman)b.Clone();

b.Fam = "Сидоров";

b.rd.min = 9; // a.Fam="Петров" a.min=7 !! остались клонированные значения

}

}

}

Соседние файлы в папке Lesson 6