Иллюстрированный самоучитель по Visual Basic .NET

Снова о конструкторах

Если в вашем классе не определен конструктор, VB.NET автоматически генерирует для него конструктор, вызываемый без аргументов. Работа этого конструктора сводится к инициализации всех полей экземпляра значениями по умолчанию. Такой конструктор называется конструктором по умолчанию или безаргументным конструктором. Если в классе определен хотя бы один пользовательский конструктор, VB.NET не станет генерировать конструктор по умолчанию.

Ничто не мешает вам определить в классе несколько конструкторов с разными уровнями доступа. Например, можно определить абсолютно безопасный конструктор с атрибутом Public и конструктор с атрибутом Friend, использование которого сопряжено с чуть большим риском. Конечно, эти конструкторы должны вызываться с разными параметрами, поскольку VB.NET различает методы по списку параметров, а не по модификаторам уровня доступа.

Конструкторы перегружаются, как и остальные методы, однако при этом нельзя использовать ключевое слово Overloads. Ниже приведен фрагмент обновленной версии класса Employee с конструктором, позволяющим задать значение нового поля.

Public Class Employee
Private m_Name As String
Private m_NickName As String
Private m_Salary As Decimal
Public Sub NewCByVal sName As String.ByVal curSalary As Decimal)
m_Name = sName
m_Salary = curSalary
End Sub
Public SubNewCByVal theName As String.ByVal nickName As String._
ByVal curSalary As Decimal)
m_Name = theName
m_NickName = nickName
m_Salary = curSalary
End Sub

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

Перегрузка конструкторов приводит к дублированию кода в программе. Так, в приведенном выше фрагменте значения m_Name и fli_Salary присваивались в обоих конструкторах. В VB.NET для таких ситуаций предусмотрена специальная сокращенная запись: конструкция MyClass.New вызывает другой конструктор класса [На момент написания книги также можно было воспользоваться ключевым словом Me, но вариант с MyClass является предпочтительным.]. Пример:

Public Sub New(ByVal sName As String.ByVal curSalary As Decimal)
m_Name = Sname
mJSalary = curSalary End Sub
Public Sub New(ByVal sName As String, ByVal nickName As String._ ByVal curSalary As Decimal)
MyClass.Newt sName.curSalary)
m_NickName =nickName
End Sub

При вызове другого конструктора конструкцией MyClass.New порядок определения конструкторов в программе не важен. VB.NET выбирает конструктор по типу переданных параметров независимо от его места в определении класса.

Примечание
Помните, что MyClass – ключевое слово, а не объект. Значение MyCLass нельзя присвоить переменной, передать процедуре или использовать в операторе Is. В подобных ситуациях используется ключевое слово Me; оно обозначает конкретный объект, код которого выполняется в настоящий момент
.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.