Механизм формирования массива объектов и работы с ним в целом идентичен массиву значимых типов. Принципиальное отличие массива объектов от массива значимых типов заключается в том, что объект определенного класса представляет собой ссылку, и, следовательно, массив объектов хранит не собственно объекты, а ссылки.
Следствие:
Объект, на который указывает элемент массива, должен быть созданным явным образом с использованием операции new.
Массив значимых типов Массив объектов
int[] a; Тип[] b;
a=new int[2]; b=new Тип [2];
a[0]= 15;
a[1]= 25;
Объект создаем в явном виде: b[0]=new Тип();
b[1]= new Тип();
В каждом классе по умолчанию определен конструктор без параметров. При создании объекта вызывается конструктор, в задачу которого входит начальная установка полей объектов: поля значимого типа – 0, поля ссылочного типа – null.
Пример:
Определить класс «Студент» с полями: фамилия, Номер зачетной книжки, оценки за последнюю сессию и методом вывода данных о студенте на экран.
class Студент
{
public string Фам;
public int Зач;
public int[] Оц;
public void Показать()
{
int i;
Console.Write(Фам + Зач);
for (i = 0; i < Оц.Length; i++)
Console.Write(Оц[i]);
Console.WriteLine();
}
}
Создадим объект класса Студент:
Студент ст;
ст = new Студент();
Фам Зач Оц
«» 0 0
Конструктор может быть переопределен, в этом случае конструтор по умолчанию становится недоступным. Если есть необходимость в конструкторе без параметров, конструктор должен быть определен в явном виде.
Как правило, с помощью конструктора задаются начальные значения полей, эти значения могут быть приняты за счет параметров конструктора. В качестве параметра конструктора может быть выбран объект того же типа – конструктор копированияю Его задача – снять копию полей принятого объекта.
Различают два вида конструкторов копирования:
1. Поверхностное копирование (с полей значений снимается копия значений, с полей ссылок – копия ссылок)
2. Конструктор полного копирования (с полей значений снимается копия значений, для полей ссылок создается объект и в него копируются данные, на которые указывает ссылочное поле оригинала)
Конструктор с параметрами
public Студент (string Фам, int зач, int[] оц)
{ this.Фам = Фам; //this – ссылка на активный объект
this.Зач=Зач;
this.Оц=Оц;
}
Конструктор поверхностного копирования
public Студент (Студент ст)
{ Фам = ст.Фам;
Зач = ст.Зач;
Оц= ст.Оц;
}
Основная программа
Студент ст1; Студент ст2;
int[] Оц;
Оц=new int[]{10,10};
ст1=new Студент («Петров», 777, Оц);
ст2=new Студент (ст1);
При изменении массива оценок изменятся данные и в объекте ст1, и в объекте ст2.
Конструктор полного копирования
public Студент (string Фам, int зач, int[] оц)
{ this.Фам = Фам;
this.Зач=Зач;
this.Оц=new int[Оц.Length];
Array.Copy(Оц,0,this. Оц,0, Оц.Length);
}
public Студент (Студент ст)
{ Фам = ст.Фам;
Зач = ст.Зач;
Оц= new int[Оц.Length];
Array.Copy(Оц,0,this. Оц,0, Оц.Length);
}
У каждого объекта при копировании создается свой собственный массив оценок.
Дата: 2019-02-02, просмотров: 249.