Конструктор по умолчанию

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

Перегруженные функции

 

В С#, как впрочем, и в других объектно-ориентированных языках программирования, можно объявить несколько функций с одинаковыми именами. Функции должны отличаться списком принимаемых параметров. Список может отличаться либо количеством, либо типом либо порядком следования параметров. Тип возвращаемого значения функции роли не играет. Термин перегрузка относится к имени функции. При вызове функций транслятор по списку параметров определяет, какая именно функция среди одноименных, должна быть вызвана. Примером перегрузки функций может служить определение в классе нескольких конструкторов.

 

Конструктор – это специальная функция класса, предназначенная для инициализации полей класса в момент создания объекта этого класса.

Имя конструктора всегда совпадает с именем класса.

Конструкторов в классе может быть несколько или ни одного.

На конструкторы накладываются следующие ограничения:

1.Конструктор не может иметь возвращаемого значения даже void

2.Как следствие 1 нельзя использовать оператор return

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

Конструкторы, в отличие от C++ в C# можно объявлять со спецификациями public, private и protected. Конструктор со спецификацией public автоматически (не явно) вызывается на этапе компиляции при создании экземпляра данного класса. Попытка вызвать конструктор явным образом вызовет ошибку компиляции. Конструкторы со спецификацией private и protected могут быть вызваны только с помощью других конструкторов, объявленных со спецификацией public. Различают следующие типы конструкторов:

1. Конструктор по умолчанию

2. Конструктор с аргументами

 

 

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

Если в классе программистом не определен конструктор по умолчанию, то, в отсутствии других конструкторов, компилятор создает его сам. Конструктор по умолчанию, созданный компилятором, инициализирует все поля класса следующим образом – числовым значениям – ноль, булевским переменным – false, для строк значение пустой ссылки – null.

 

Пример:

using System;

namespace ConsoleApplication15

{

class CA// В классе СА нет явно объявленных конструкторов

{

public int x,y,z;

}

class Class1

{

[STAThread]

static void Main(string[] args)

{

CA obj=new CA();

Console.WriteLine("x ={0,2} y ={1,2} z ={2,2}",obj.x,obj.y,obj.z);

}

}

}

 

Результат работы программы:

x = 0 y = 0 z = 0

 

Добавим в определение класса СА конструктор по умолчанию и проследим, как изменится результат работы приложения:

 

class CA

{

public int x,y,z;

public CA()

{

x=3;

y=2;

z=5;

}

}

 

Результат работы программы:

x = 3 y = 2 z = 5

В классе может быть объявлен только один не статический конструктор по умолчанию, так как перегрузить его невозможно (список принимаемых параметров пуст).
Вопросы:

 

1. Какие способы передачи параметров методам определены в C#?

2. Чем отличается передача параметров методам с помощью модификатора ref от передачи параметров методам с помощью модификатора out?

3. Можно ли с помощью оператора return вернуть из метода ссылку на объект?

4. Можно ли с помощью оператора return вернуть из метода массив?

5. Как организовать передачу методам переменного количества параметров?

6. Чем отличается обращение к статическим методам класса от обращения к не статическим методам?

7. К каким членам класса могут обращаться статические функции класса?

8. К каким членам класса могут обращаться не статические функции класса?

9. Что такое перегрузка функции?

10. Являются ли функции, заголовок которых отличается только типом возвращаемого значения, перегруженными?

11. Как отличить конструктор класса от других функций класса?

12. Для чего используются конструкторы?

13. В каком случае компилятор сам создает конструктор по умолчанию?

14. Сколько в классе может быть объявлено не статических конструкторов по умолчанию?