ЛЕКЦИЯ № 10
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ
Цель: изучение технологии создания пользовательских компонентов
Visual Basic 2005 позволяет не только использовать готовые generic-классы, но и создавать свои собственные. В качестве примера рассмотрим следующий класс:
Class SomeClass(Of Т)
Public _t As T
Public Sub ShowValue()
Console.WriteLine( _t.ToString())
End Sub
End Class
Поскольку на момент компиляции не известен конкретный тип параметра, то с ним внутри класса можно обращаться только как с типом System.Object. Существует возможность несколько ослабить данное ограничение, но о нем несколько далее. Использование созданного класса можно продемонстрировать следующим образом:
Dim a As New SomeClass(Of Integer) Dim b As New SomeClass(Of String) a.t = 12354
b.t = "hello"
a.ShowValue()
b.ShowValue()
На экран будут выведены строки "12354" и "hello".
Так как использование параметров исключительно как наследников класса System.Object неудобно, в .NET введено понятие ограничения. Ограничение позволяет задавать набор классов и интерфейсов, которые обязан наследовать и реализовать тип, передаваемый в качестве параметра. Например, если мы собираемся проводить операцию сравнения экземпляров класса, переданного параметром, то можно потребовать от него реализации интерфейса IComparable:
Class SomeClass(Of Т As IComparable)
Public _t As T ,
Public _t1 As T
Public Sub ShowValue()
If _t.CompareTo(_tl) > 0 Then Console.WriteLine("t > t1") End Sub
End Class
В качестве ограничений можно задавать не один класс или интерфейс, а несколько, в этом случае параметр должен наследовать и реализовать все классы и интерфейсы, которые требуется:
Class SomeClass(Of Т As (IComparable, SomeOtherClass))
Кроме классов можно создавать generic-функции. Например, допустимо создание следующего класса:
Class SomeClass
Public Sub ShowValue(Of T) (ByVal tt As T)
Console.WriteLine(tt.GetType.ToString) End Sub
End Class
Интересно отметить тот факт, что для функций можно не указывать явно тип параметра, т. к. компилятор может сам его определить. Таким образом, следующий фрагмент кода абсолютно корректен:
Dim a As New SomeClass
a.ShowValue(Of String) (5)
a.ShowValue(5)
После его выполнения на консоли будут отображены строки "System.String" и "System.Int32".
Возможно создание generic-интерфейсов, при этом все обращения к данному интерфейсу должны указывать конкретный тип параметров. То есть если класс реализует интерфейс или интерфейс передается в качестве параметра функции, необходимо указывать конкретный тип в качестве параметра. Допустим, есть следующее объявление интерфейса:
Interface IMyInterface (Of Т)
Sub SayHello(ByVal obj As T)
End Interface
В этом случае класс, реализующий интерфейс, должен быть объявлен с указанием конкретного типа интерфейса (если только сам класс не является generic-классом):
Class SomeClass
Implements IMyInterface (Of String)
Sub SayHello(ByVal obj As String) Implements IMyInterface (Of String)
.SayHello
Console.WriteLine{'hello, " + obj)
End Sub
End Class
В качестве параметра интерфейса можно использовать параметр, переданный genericклассу. Например:
Class SomeClass(Of TT)
Implements IMyInterface(Of TT)
Sub SayHello(ByVal obj As TT) Implements IMyInterface(Of TT).SayHello
Console.WriteLine(obj.ToString)
End Sub
End Class
В Visual Basic 2005 визуальные классы ничем не отличаются от всех остальных. Однако они особенным образом используются интегрированной средой разработки Visual Basic 2005, что позволяет значительно упрощать написание кода для визуальных классов. Рассмотрим подробнее создание элемента управления и класса-формы.
Для упрощения создания собственного элемента управления в IDE Visual Basic 2005 имеется отдельный вид проекта Windows Control Library. Чтобы им воспользоваться, необходимо в меню File (Файл) выбрать команду New (Новый), а затем значение Project (Проект).
Созданный при этом код будет содержать класс, унаследованный от System.Windows.Forms.UserContго1 — именно он и представляет собой создаваемый класс. Следует отметить тот факт, что в Visual Basic 2005 понятия "класс" и "компонент" часто используются взаимозаменяемо. Различие состоит в том, что обычно под компонентом понимается визуальный класс или же экземпляр визуального класса. Рассмотрим в качестве примера создание класса, аналогичного стандартной полоске прогресса.
Для создания класса выполните следующие действия:
1. Используя шаблон Windows Control Library, создайте новый проект
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.