Учебно-методический комплекс общее количество часов 58 ч. Лекции 28 ч


Download 2.46 Mb.
bet24/91
Sana19.10.2023
Hajmi2.46 Mb.
#1709453
TuriУчебно-методический комплекс
1   ...   20   21   22   23   24   25   26   27   ...   91
Bog'liq
Язык программирования C#

6.3. Создание объекта. Конструкторы

Для создания объекта используются специальные методы класса – конструкторы. Конструкторам могут предшествовать все вышеперечисленные спецификаторы доступа.


Конструкторы не возвращают никого значения даже пустое значения void. Имя конструктора должно совпадать с именем класса. При необходимости программист может создать несколько конструкторов, различающихся между собой числом и типом параметров. Нестатический класс, то есть класс, используемый для создания объектов всегда должен иметь хотя бы один конструктор, даже если вам не нужна инициализация полей класс должен содержать пустой конструктор, не принимающий параметров и не производящий никаких операций.
Общая форма для объявления конструктора класса имеет следующий вид:

[спецификатор доступа] [спецификатор памяти] имя_класса([параметры])


{
[тело метода]
}

public Brick()


public Brick(double Width, double Length, double Height, double Weight)

class Brick


{
// поля
public Double _Length, _Width, _Height, _Weight;

// методы


public void ShowState()
{
Console.WriteLine("Кирпич:");
Console.WriteLine("Длина: " + _Length);
Console.WriteLine("Ширина: " + _Width);
Console.WriteLine("Высота :" + _Height);
Console.WriteLine("Вес :" + _Weight);
}

// конструкторы


// консруктор 1
public Brick()
{
_Width = 50;
_Width = 25;
_Height = 10;
_Weight = 500;
}

// консруктор 2


public Brick(double Width, double Length, double Height, double Weight)
{
_Width = Width;
_Length = Length;
_Height = Height;
_Weight = Weight;
}
}
Лист. 6.7

В листинге определен класс Brick. У этого класса два конструктора: первый конструктор без параметров, второй принимает четыре параметра типа double.


Объекты – это экземпляры классов, в объектах содержатся поля, задекларированные в классах, и средства для работы с этими полями – методы. Все, с чем вы имеете дело в языке C#, является объектом.


Общая форма для создания объекта некоторого класса имеет следующий вид:

имя_класса имя_объекта = new имя_класса(парметр1, параметр2,…, параметрN);


Исходя из типа и количества переменных в скобках компилятор определит нужный конструктор. Естественно объявление объекта и его создание можно разбить на две строки.


имя_класса имя_объекта;


имя_объекта = new имя_класса([параметр1, параметр2,…, параметрN]);

Объекты в языке C# являются переменными ссылочного типа. Это означает, что в переменной хранится не сам объект, а лишь адрес области в управляемой куче, в которой расположен объект. Сама переменная хранится в стеке.


Для дальнейших примеров создадим простой класс, содержащий только одно поля типа string, в котором будем хранить идентификатор объекта, и один конструктор, инициализирующий это поле.
class SimpleClass
{
public string Name;

public SimpleClass(string aName)


{
Name = aName;
}
}
Лист. 6.8
При присвоении одной объектной переменной значения другой, поля класса из одного объекта в другой не копируются, копируется лишь адрес. После присвоения две объектные переменные будут указывать на одну и ту же область памяти и изменения, сделанные одной переменной, непосредственно отразятся на другой.

class Program


{
static void Main(string[] args)
{
SimpleClass O1, O2;
O1 = new SimpleClass("O1");
Console.WriteLine("После создания в объекте O1 хранится: " + O1.Name);
O2 = O1;
O2.Name = "Здесь был O2";
Console.WriteLine("Теперь в O1 хранится: " + O1.Name);
}
}
Лист. 6.9

В этом листинге объявляются две переменной типа SimpleClass O1 и O2. Затем создается объект O1, при создании полю Name этого объекта присваивается строка “O1”. В следующей строке значение этого поля выводится на консоль.


Затем объектной переменной O2 присваивается переменная O1. Теперь через переменную O2 изменяем, значение поля Name на "Здесь был O2".
В завершении программы выводим поле Name объекта O1 и видим что оно изменилось на "Здесь был O2". Это происходит потому, что обе переменные ссылаются на одну и ту же область памяти.
Вывод программы:
После создания в объекте O1 хранится
Теперь в O1 хранится: Здесь был O2
Когда сравниваются два объекта, сравниваются не их поля, а адреса, хранящиеся в объектных переменных.

class Program


{
static void Main(string[] args)
{
SimpleClass O1, O2, O3;
O1 = new SimpleClass("абв");
O2 = new SimpleClass("абв");

Console.WriteLine("В объекте O1 хранится:" + O1.Name);


Console.WriteLine("В объекте O2 хранится:" + O2.Name);
if (O1 == O2)
Console.WriteLine("O1 == O2");
else
Console.WriteLine("O1 != O2");

O3 = O1;
if (O1 == O3)


Console.WriteLine("O1 == O3");
else
Console.WriteLine("O1 != O3");
}
}
Лист. 6.10
В этом листинге объявляются три переменных тип SimpleClass O1, O2 и O3. Далее создаются два объекта O1 и O2, эти объекты инициализируются одинаковыми значениями так, что их поля хранят одни и те же значения, что и показывается в следующей строке. Затем эти переменные сравниваются и оказываются, что они не равны.
Далее переменной O3 присваивается ссылка, хранящаяся в O1. В следующей строке эти ссылки сравниваются.
Вывод программы:
В объекте O1 хранится:абв
В объекте O2 хранится:абв
O1 != O2
O1 == O3
Вывод. 6.2

Download 2.46 Mb.

Do'stlaringiz bilan baham:
1   ...   20   21   22   23   24   25   26   27   ...   91




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling