Определение классов в программе
От использования готовых классов .NET Framework мы переходим к определению собственных классов в программе. Код класса можно разместить в отдельном файле при помощи команды Project › Add Class, как в VB6, или же просто ввести его в нужном модуле – например, в стартовом модуле, содержащем точку входа в консольное приложение.
Примечание
В процессе тестирования мы предпочитаем связывать каждый класс с процедурой Sub Main, в которой он используется. Таким образом, код классов не оформляется в виде отдельных модулей классов, а выделяется в программный модуль с отдельной процедурой Sub Main, предназначенной для их тестирования. Если вы последуете нашему примеру, учтите, что код, определяемый на уровне модуля, доступен везде, где доступен сам модуль. Таким образом, мы создаем некий аналог глобальных переменных и функций VB.NET – со всеми опасностями, присущими глобальным данным.
VB.NET не смотрит на то, сколько классов определяется в одном файле. В большинстве классов определяются один или два конструктора, свойства для чтения и изменения состояния объекта, а также методы для выполняемых действий. Для примера возьмем простейший класс Employee с двумя полями (имя и зарплата) и небольшую тестовую программу. В классе определяются два свойства, доступных только для чтения; эти свойства возвращают значения полей. Методы в этом классе отсутствуют:
1 Module EmployeeTestl 2 Sub Main() 3 Dim Tom As New Employee("Tom". 100000) 4 Console.WriteLine(Tom.TheName & "salary is " & Tom.Salary) 5 Console. ReadLine() 6 End Sub 7 ' Определение класса 8 Public Class Employee 9 Private m_Name As String 10 Private m_Salary As Decimal 11 Public Sub New(ByVa1 sName As String.ByVal curSalary As Decimal) 12 m_Name = Sname 13 m_Salary = curSalary 14 End Sub 15 Public Readonly Property TheName()As String 16 Get 17 Return m_Name 18 End Get 19 End Property 20 Public Readonly Property Salary() As Decimal 21 Get. 22 Return m_Salary 23 End Get 24 End Property 25 End Class 26 End Module
В строках 2-6 определяется процедура Sub Main, используемая компилятором в качестве точки входа. Если эта процедура выбрана в качестве стартового объекта (это происходит по умолчанию, но вообще стартовый объект выбирается в диалоговом окне Project Properties), она отвечает за создание исходных экземпляров. Далее созданные объекты обычно создают другие объекты в ответ на получение ими сообщений. Конечно, в нашей простой программе ничего такого не происходит.
Непосредственное создание объекта происходит в строке 3, играющей ключевую роль в процессе тестирования программы. В этой строке при создании нового объекта Employee методу New передаются два параметра – имя и начальная зарплата. В строке 4 мы выводим значения свойств TheName и Salагу, чтобы убедиться в том, что исходное состояние созданного объекта было задано верно.
Класс Employee определяется в строках 8-25. Как упоминалось выше, для удобства тестирования код класса определяется в исходном модуле, хотя мы с таким же успехом могли воспользоваться командой Project › Add Class и выделить его в отдельный файл.