- •Void Putdec(int d);
- •Int Numberdec();
- •Int dec;
- •Void Init (int m,int s);
- •1. В базовом и производном классе нет конструкторов.
- •2. В базовом классе создан конструктор без параметров, в производном конструктор отсутствует.
- •3. В базовом классе конструктор отсутстивует, в производном создан без параметров
- •4. В базовом и производном классах есть конструкторы без параметров.
- •5. В базовом есть конструктор без параметров, в производном с параметрами.
- •6. Если в базовом классе есть конструктор с параметрами, в производном классе должен быть с параметрами и базовый конструктор должен быть явно вызван.
- •Icalculate.Cs
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 !! остались клонированные значения
}
}
}