Основы VB.NET Урок 3. Классы в VB.NET
Ну вот, теперь, с приходом VB.NET, классы в нем стали действительно классами. Их можно наследовать один от другого, и вообще с ними можно делать все, что раньше было возможно только в других, "настоящих" объектно-ориентированных языках.
Для начала обсудим, что такое вообще классы. Лучше всего представлять себе класс как некоторую форму или некоторый шаблон, по которому мы можем конструировать объекты. Скажем, мы можем сделать класс "Квадратное уравнение" (и на одном из последующих уроков мы его обязательно сделаем). Наш класс "Квадратное уравнение" будет некоторым шаблоном, по которому мы сможем делать конкретные экземпляры - т. е. квадратное уравнение с конкретными коэффициентами. У одного экземпляра коэффициенты будут одни, у другого - другие. Кроме того, в нашем классе будут функции для нахождения корней квадратного уравнения. Заметьте, что формулы для нахождения корней у всех квадратных уравнений одинаковы. Эти функции (или, что более правильно, методы) будут принадлежать не конкретному экземпляру (квадратному уравнению), а всему нашему классу "квадратных уравнений". И это важно понять, что класс помимо некоторых данных содержит, как правило, еще и методы, которые работают с этими данными.
Давайте перепишем нашу программу с прошлого урока так, чтобы она использовала классы. Для этого измените ее текст следующим образом:
Imports System
Class MyFirstClass
Public Shared Sub Main()
Console.WriteLine("First App")
End Sub
End Class
Запускайте программу (Ctrl+F5). Результат должен быть такой же, как и на предыдущем уроке - в консольном окне появится надпись "First App".
Теперь давайте разбираться с тем, что мы тут написали. Во-первых, мы завели класс. Он пишеться между строками Class имя_класса и End Class:
...
Class MyFirstClass
...
End Class
Имя класса, разумеется, может быть любое. Мы назвали наш класс MyClass, и могли назвать его как угодно. Далее, внутри нашего класса есть метод Main. Помните замечание пошлого урока, что в каждой программе должен быть Main? На этом уроке мы поместили Main прямо в класс, но в принципе это не обязательно. Метод Main нашего класса мы написали с модификатором доступа Public. Это для того, чтобы наш метод можно было бы вызвать извне класса. Далее перед методом Main стоит еще один модификатор - Shared. Он означает, что метод Main возможно вызвать без создания экземпляра класса. И действительнол, обратите внимание, что мы нигде в нашей программе не создаем никакого экземпляра нашего класса. Метод Main возможно вызвать именно потовму, что он объявлен как Shared.
Давайте теперь модифицируем нашу программу так, чтобы у нас создавался экземпляр класса. Вот новый текст:
Imports System
Class MyFirstClass
Sub F()
Console.WriteLine("First App")
End Sub
End Class
Module MyModule
Public Sub Main()
Dim cl As New MyFirstClass()
cl.F()
End Sub
End Module
Обратите внимание на следующие изменения - во-первых, функция Main теперь не в классе MyFirstClass, а в модуле MyModule (помните, что функция Main должна быть только одна). В нашем классе мы просто переименовали эту функцию в F. Далее мы в модуле MyModule заводим экземпляр cl нашего класса:
...
Dim cl As New MyFirstClass()
...
Так как мы объявляем экземпляр класса, то мы используем слово new. Во всем другом объявление аналогично объявлению переменных, скажем, целого типа:
...
Dim k As Integer
...
В следующей строчке мы вызываем для данного экземпляра класса метод F:
...
cl.F()
...
Этот вариант программы выведет, как и следовало ожидать, туже самую надпись "First App". Если программа не запускается, то проверьте в свойствах проекта, что указывается в качестве начального объекта для запуска. Для этого щелкайте правой кнопкой мыши на имени проекта в окне Solution Explorer и выбирайте Properties:
В появившемся окне FirstApp Property Pages задайте Startup Object как MyModule:
Нажимайте OK и, если других ошибок нет, то все должно заработать.
И, напоследок, приведем еще третий вариант нашей программы - теперь экземпляр нашего класса MyFirstClass будет создаваться в другом классе (так, кстати, чаще всего и делается). Второй класс мы назовем Test:
Imports System
Class MyFirstClass
Sub F()
Console.WriteLine("First App")
End Sub
End Class
Class Test
Public Shared Sub Main()
Dim cl As New MyFirstClass()
cl.F()
End Sub
End Class
Не забудьте только поменять в окне FirstApp Property Pages параметр Startup Object на Test. И опять обратите внимание, что для метода Main тестового класса Test мы используем ключевое слово Shared (так как мы не создаем экземпляра этого класса).
|