Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Создание объектов. Конструкторы. Примеры использования.




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

- Конструкторне возвращает значение.

- Класс может иметь несколько конструкторов с разными параметрами для разных видов инициализации.

- Если программист не указал ни одного конструктора или какие-то поля не были инициализированы, полям значимых типов присваивается нуль, полям ссылочных типов — значение null.

- Конструктор, вызываемый без параметров, называется конструктором по умолчанию.

В листинге 1 начальные значения полей класса заданы при описании класса. Если же при создании объектов требуется присваивать полю разные значения, это следует делать в конструкторе.

В листинге 2 в класс Prim добавлен конструктор, а поля сделаны закрытыми. В программе создаются два объекта с различными значениями полей.

Листинг 2- Класс с конструктором

using System;

namespace ConsoleApplication1

(

class Prim {

рublic Prim(int a, double у) // конструктор с параметрами

{

this.a = а;

this.y = у;

}

рublic double Getу() // метод получения поля у

{

return y;

}

int a;

double у;

}

 

class Class1

{ static void Main()

{

Prim a = new Prim(10, 0.01); // вызов конструктора

Соnsole.WriteLine(a.Gety()); // результат: 0,01

Prim b = new Prim(1. 2.2): // вызов конструктора

Соnsole.WriteLine(b.Gety()); // результат: 2,2

}

}

}

В классе, чтобы обеспечить возможность инициализации объектов разными способами, можно иметь несколькоконструкторов, но при этом они должны иметь разные сигнатуры.

Листинг 3- Класс с 2-мя конструкторами

class Prim

{

рublic Prim(int а) // конструктор 1

{

this.a = a;

this.y = 0.002;

}

 

public Prim(double y) // конструктор 2

{

this.a = 1;

this.y = y;

}

...

}

...

Prim x = new Prim(300); // вызов конструктора 1

Prim y = new Prim(5.71); // вызов конструктора 2

 

Если один из конструкторов выполняет какие-либо действия, а другой должен делать то же самое плюс еще что-нибудь, удобно вызвать первый конструктор из второго. Для этого используется уже известное ключевое слово this, например:

class Prim {

рublic Prim(int а) // конструктор 1

{

this.a = a;

}

рublic Prim(int a, double y): this(а) // вызов конструктора 1

{

this.y = y;

}

}

Конструкция, находящаяся после двоеточия, называется инициализатором, то есть тем кодом, который исполняется до начала выполнения тела конструктора.

Вспомним, что все классы в С# имеют общею предка — класс object. Конструктор любого класса, если не указан инициализатор, автоматически вызывает конструктор своего предка. Это можно сделать и явным образом с помощью ключевого слова basе, обозначающего конструктор базового класса. Таким образом, первый конструктор из предыдущего примера можно записать и так:

рublic Prim (int a): base() // конструктор 1

{

this.а = а;

}

Конструктор базового класса вызывается явным образом в тех случаях, когда ему требуется передать параметры.

До сих пор речь шла о конструкторах экземпляра. Существует второй тип конструкторов — статические конструкторы, или конструкторы класса. Конструктор экземпляра инициализирует данные экземпляра, конструктор класса — данные класса.

Статический конструктор не имеет параметров, его нельзя вызвать явным образом. Система сама определяет момент, в который требуется его выполнить. Гарантируется только, что это происходит до создания первого экземпляра объекта и до вызова любого статического метода.

Некоторые классы содержат только статические данные, и, следовательно, создавать экземпляры таких объектов не имеет смысла.

В С# введена возможность описывать статический класс, то есть класс с модификатором static. Экземпляры такого класса создавать запрещено, и кроме того, от него запрещено наследовать. Все элементы такого класса должны явным образом объявляться с модификатором static (константы и вложенные типы классифицируются как статические элементы автоматически). Конструктор экземпляра для статического класса задавать, естественно, запрещается.

Листинг 3 - Статический класс

using System;

namespace ConsoleApplication1

{

static class D

{

static int a = 200;

static double b = 0.002;

 

рublic static void Print ()

{

Сonsole.WriteLine("а = " + а);

Сonsole.WriteLine("b = " + b);

}

}

class Class1

{ static void Main()

{

D.Print();

}

}

}






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных