Что такое конструктор класса c

Что такое конструктор класса c

Возможно вы заметили, что определяя класс, мы не можем инициализировать его поля (члены) в самом определении. Можно присвоить им значение, написав соответствующий метод класса и вызвав его, после создания объекта вне класса. Такой способ не совсем удобен, так как объявляя, допустим, 33 объекта класса нам придется 33 раза вызывать метод, который присваивает значения полям класса. Поэтому, как правило, для инициализации полей класса, а так же для выделения динамической памяти, используется конструктор.

Конструктор (от construct – создавать) – это особый метод класса, который выполняется автоматически в момент создания объекта класса. То есть, если мы пропишем в нем, какими значениями надо инициализировать поля во время объявления объекта класса, он сработает без “особого приглашения”. Его не надо специально вызывать, как обычный метод класса.

В строках 11 – 17 определяем конструктор: имя должно быть идентично имени класса; конструктор НЕ имеет типа возвращаемого значения (void в том числе). Один объект объявляется сразу во время определения класса – строка 25. При запуске программы, конструктор этого объекта сработает даже до входа в главную функцию. Это видно на следующем снимке:

программа еще не дошла до выполнения строки 29 setlocale ( LC_ALL , "rus" ) ; , а конструктор уже “отчитался”, что сработал (кириллица отобразилась некорректно). В строке 30 – смотрим, что содержат поля класса. Второй раз конструктор сработает в строке 32, во время создания объекта obj2 .

Деструктор (от destruct – разрушать) – так же особый метод класса, который срабатывает во время уничтожения объектов класса. Чаще всего его роль заключается в том, чтобы освободить динамическую память, которую выделял конструктор для объекта. Имя его, как и у конструктора, должно соответствовать имени класса. Только перед именем надо добавить символ

Добавим деструктор в предыдущий код. И создадим в классе два конструктора: один будет принимать параметры, второй – нет.

Читайте также:  Как открыть анонимную вкладку в гугл хром

Конструктор инициализирует объект при его создании. У конструктора такое же имя, как и у его класса, а с точки зрения синтаксиса он подобен методу. Но у конструкторов нет возвращаемого типа, указываемого явно. Ниже приведена общая форма конструктора:

Как правило, конструктор используется для задания первоначальных значений переменных экземпляра, определенных в классе, или же для выполнения любых других установочных процедур, которые требуются для создания полностью сформированного объекта. Кроме того, доступ обычно представляет собой модификатор доступа типа public, поскольку конструкторы зачастую вызываются в классе. А список_параметров может быть как пустым, так и состоящим из одного или более указываемых параметров.

Каждый класс C# снабжается конструктором по умолчанию, который при необходимости может быть переопределен. По определению такой конструктор никогда не принимает аргументов. После размещения нового объекта в памяти конструктор по умолчанию гарантирует установку всех полей в соответствующие стандартные значения. Если вы не удовлетворены такими присваиваниями по умолчанию, можете переопределить конструктор по умолчанию в соответствии со своими нуждами.

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

Давайте рассмотрим применение конструкторов на примере:

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

Каждый раз, когда создается класс или структура, вызывается конструктор. Whenever a class or struct is created, its constructor is called. Класс или структура может иметь несколько конструкторов, принимающих различные аргументы. A class or struct may have multiple constructors that take different arguments. Конструкторы позволяют программисту задавать значения по умолчанию, ограничивать число установок и писать код, который является гибким и удобным для чтения. Constructors enable the programmer to set default values, limit instantiation, and write code that is flexible and easy to read. Дополнительные сведения и примеры см. в разделах Использование конструкторов и Конструкторы экземпляров. For more information and examples, see Using Constructors and Instance Constructors.

Читайте также:  Что такое роторная бритва

Конструкторы без параметров Parameterless constructors

Если не предоставить конструктор для класса, C# создаст конструктор по умолчанию, который создает экземпляр объекта и задаст переменным-членам значения по умолчанию, как показано в разделе Таблица значений по умолчанию. If you don’t provide a constructor for your class, C# creates one by default that instantiates the object and sets member variables to the default values as listed in the Default Values Table. Если не предоставить конструктор для структуры, C# будет использовать неявный конструктор без параметров, чтобы автоматически инициализировать каждое поле значением по умолчанию для данного типа согласно разделу Таблица значений по умолчанию. If you don’t provide a constructor for your struct, C# relies on an implicit parameterless constructor to automatically initialize each field of a value type to its default value as listed in the Default Values Table. Дополнительные сведения и примеры см. в разделе Конструкторы экземпляров. For more information and examples, see Instance Constructors.

Синтаксис конструктора Constructor syntax

Конструктор — это метод, имя которого совпадает с именем его типа. A constructor is a method whose name is the same as the name of its type. Его сигнатура метода содержит только имя метода и список параметров. Она не содержит возвращаемый тип. Its method signature includes only the method name and its parameter list; it does not include a return type. В приведенном ниже примере демонстрируется конструктор для класса с именем Person . The following example shows the constructor for a class named Person .

Если конструктор поддерживает реализацию в виде оператора, можно использовать определение тела выражения. If a constructor can be implemented as a single statement, you can use an expression body definition. В следующем примере определяется класс Location , конструктор которого имеет один строковый параметр name. The following example defines a Location class whose constructor has a single string parameter named name. Определение тела выражения присваивает аргумент полю locationName . The expression body definition assigns the argument to the locationName field.

Читайте также:  Программа для создания сайта на компьютере

Статические конструкторы Static constructors

В приведенных выше примерах показаны конструкторы экземпляров, которые создают новый объект. The previous examples have all shown instance constructors, which create a new object. В классе или структуре также может быть статический конструктор, который инициализирует статические члены типа. A class or struct can also have a static constructor, which initializes static members of the type. Статические конструкторы не имеют параметров. Static constructors are parameterless. Если вы не предоставили статический конструктор для инициализации статических полей, компилятор C# инициализирует статические поля значениями по умолчанию, которые указаны в таблице значений по умолчанию. If you don’t provide a static constructor to initialize static fields, the C# compiler initializes static fields to their default value as listed in the Default Values Table.

В следующем примере статический конструктор используется для инициализации статического поля. The following example uses a static constructor to initialize a static field.

Можно также определить статический конструктор с помощью определения тела выражения, как показано в следующем примере. You can also define a static constructor with an expression body definition, as the following example shows.

Дополнительные сведения и примеры см. в разделе Статические конструкторы. For more information and examples, see Static Constructors.

Ссылка на основную публикацию
Adblock detector