Программирование на C# - ООП C# - Написание конструкторов

Программирование на C# - ООП C#

ООП С Sharp - Написание конструкторов

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

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

 
public class MyClass
{
public MyClass()
{
}
... 

Этот конструктор не делает ничего, поскольку мы не добавили в него никакого кода. Добавим целочисленное поле MyField к классу и инициализируем его значением 10:

public class MyClass
{
public MyClass()
{
myField = 10;
}
private int myField;
... 

Обратите внимание, что никакого типа возврата не указано, даже void. Компилятор распознает конструктор по тому факту, что его имя совпадает с именем содержащего его класса. Следует отметить, что одним из следствий этого является невозможность написания метода, одноименного с классом, содержащим его, потому что компилятор интерпретирует его как конструктор. В предыдущем примере вас может удивить то, что таким образом не достигается ничего принципиально нового. В конце концов, в синтаксисе C# можно было бы написать:

public class MyClass
private int myField = 10; 


Это даст тот же эффект — инициализация каждого объекта без явного представления конструктора. В самом деле, мы уже делали нечто подобное в примерах Authenticator, когда указывали, что поле password должно было автоматически инициализироваться пустой строкой. Здесь же мы пытаемся просто представить саму концепцию конструктора. Предыдущий фрагмент представляет собой сокращение C# неявной спецификации конструирующего кода — сокращение, характерное для C#. За этим сокращением здесь все равно присутствует работа конструктора. Кроме того, явное написание конструктора означает возможность написания кода для вычисления начальных значений во время выполнения, а сокращенная инициализация требует, чтобы эти значения были известны во время компиляции как константы.

Совсем не обязательно писать конструкторы для ваших классов, и мы до сих пор не делали этого в рассмотренных примерах. Вообще, если вы не предусматриваете никакого конструктора, компилятор “за кулисами” создает для вас конструктор по умолчанию. Это будет базовый конструктор, который инициализирует все полячлены их нормальными значениями по умолчанию (пустые строки — для строковых полей, нули — для числовых и false — для булевских).

Инициализация значениями по умолчанию — характерная черта C#, потому что C# инициализирует все члены класса. Если вы кодируете на другом языке, поведение может отличаться. Например, по умолчанию C++ никогда не инициализирует ничего, если только вы явно не укажете, чего хотите. Поэтому в C++, если вы не применяете конструктор в классе, то его члены вообще не инициализируются.

 

Добавить комментарий


Защитный код
Обновить