Лекция: Классы. Оператор new. Наследование. Visual Basic.NET
Классы играют важную роль в объектно-ориентированном программировании (а
также в ASP.NET). Класс определяется путем соединения в одно целое общего кода и
свойств — подобно тому, как из отдельных деталей собирают часы. В действительно-
сти .NET Framework состоит из очень многих классов. При создании страниц ASP.NET на самом деле вы в структуре .NET создаете объекты, определяемые на основе класса Page (страница).
Class имя
процедуры, функции и свойства
End Class
I: <%! Page Language=«VB» %>
I 2:
3: <script runat=«server»>
4: Class Clock
5: public Second as integer
6: public Minute as integer
7: public Hour as integer
8:
9: Sub SetTime (intSec as integer, intMin as integer, intHour as integer)
11: Second = intSec
12: Minute = intMin
13: Hour = intHour
14: end sub
15: End Class
16:
17: sub Page_Load(obj as object, e as eventargs)
18: dim objClock as new Clock
19:
20: objClock.Second =60
21:
22: end sub
23:
24: </script>
25:
26: <html><body>
27:
28: </bodyx/html>
Любые переменные, объявленные в классе так, как это делается в строках 5-7, называются его свойствами. В этом классе содержатся такие свойства, как Second (секунда), Minute (минута) и Hour (час). Кроме того, в нем имеется процедура для установки значений времени. В строке 20 свойство Second устанавливается равным 60.
Ключевое слово public (открытый), стоящее перед компонентом кода, сообщает
VB.NET, что этот компонент может быть виден и изменяем любым кодом, который на-
ходится как внутри, так и снаружи класса. Такой компонент кода называется глобальной
переменной. И наоборот, если используется ключевое слово private (закрытый), то со-
ответствующая переменная или процедура может использоваться только внутри класса.
Метод SetTime (установить время) устанавливает свойства Second, Minute и Hour равными
значениям его параметров. В своей странице ASP.NET вы можете делать следующее:
Dim objClock as new Clock
objClock.SetTime(60, 4, 12)
objClock.Second = 5
Оператор new
Очень важным является ключевое слово new (новый): оно используется для ини-
циализации нового объекта. Использование этого ключевого слова аналогично выполнению следующего кода:
dim intNumber as Integer = 7
Кроме того, для инициализации объектной переменной можно использовать
dim objClock as Clock = New Clock
А это равносильно простому использованию ключевого слова new.
Наследование
Наследование — это важное понятие, относящееся к классам и объектно-
ориентированному программированию.
Предположим, вы создали класс часов, Clock. Через некоторое время вы узнали, что есть два вида часов: аналоговые и цифровые. И вместо того, чтобы отбросить имеющийся класс и создавать два новых, вы можете просто создавать новые классы на основе уже имеющегося, то есть на основе класса
Clock. Свойства и методы первоначального Clock имеются у всех часов, по-
этому при создании новых часов просто добавляются любые нужные для их
работы свойства или методы. Эти действия называются наследованием.
Используя наследование, не нужно создавать полностью
новые классы, если уже есть какой-либо класс, который делает почти то же самое, что
вам нужно. Вот пример, в котором используется ваш первоначальный класс Clock:
Class AnalogClock: Inherits Clock
private ClockWound as Boolean = false
sub WindClock()
ClockWound = true
end sub
End Class
Путем наследования из первоначального класса Clock был создан новый класс,
AnalogClock (аналоговые часы). Он автоматически наследует свойства Second, Minute и
Hour, а также метод SetTime, поэтому заново создавать их не нужно. Надо только доба-
вить компоненты, специфичные для нового класса: значение типа Boolean для свойст-
ва ClockWound (часы заведены), а также метод, предназначенный для завода (wind) ча-
сов.
Теперь ваша страница ASP.NET должна выглядеть таким образом:
dim objAnalogClock as new AnalogClock
objAnalogClock.SetTime(60, 4, 12)
objAnalogClock.WindClock
Наследование способно заменять (override) родительские методы. Если по какой-то
причине метод SetTime у AnalogClock должен быть не таким, как у Clock, то для этого
надо просто создать другой метод под тем же именем:
Class AnalogClock: Inherits Clock
private ClockWound as Boolean = false
sub WindClock()
ClockWound = true
end sub
sub SetTime(intSec as integer, intMin as integer, _
intHour as integer)
Second = intSec
Minute = intMin
Hour = intHour — 12
end sub
End Class
Теперь objAnalogClock.SetTime будет использовать видоизмененную процедуру.