Като добавка, много
апликации ползват
предимствата на обекти, представени от други апликации, като ActiveX
Data Objects (ADO), Microsoft Word, Excel, Access, различните скрипт
апликации и
други. Възловата точка
е в това, че за всеки клас, който използваме, се нуждаем от декларация
на
променлива от този тип клас. Примерно, ако създаваме клас с име
CUchitel, след това в порядъка да инстанцираме
CUchitel обект, трябва да декларираме променлива:
Dim AUchitel As CUchitel
По
подобен начин решаваме да използваме обект запис -
ADO Recordset object, трябва да декларираме променлива от тип
ADO.
Recordset:
Dim rs As ADO.Recordset
Даже
и обектните променливи да са декларирани по същия начин като не
обектните, има някои забележителни разлики. В частност декларацията:
Dim obj As MyClass
няма
да
създаде обектна променлива--тя само свързва името на
променливата с името на класа. За да конструираме реално обект и да поставим променлива да
свързва този обект, ние трябва да извикаме
конструктора на класа. Тази функция, дискутирана в детайли
в Глава 3, е отговорна за
създаване на обект от класа.
Конструкторите
се викат с ключова дума New, така:
Dim obj As MyClass = New Myclass( )
или:
Dim obj As MyClass
obj = New MyClass( )
VB .NET следователно обезпечава шорткът
(препратка), който не посочва конструктора изрично:
Dim obj As New MyClass( )
(Във VB, използвахме Set, което вече не се поддържа.)
Версии късно
свързване и ранно свързване
Декларацията
на обектната променлива:
Dim obj As Class1
изрично
посочва класа от който се създава обекта (в този случай
Class1).
Фигура 53 . Intellisense показва списъка с членове (member)
Точно
затова, VB може да получи и разпечата
информация за членовете (
members) на класа, както виждаме на фиг. 53.
Както
знаете,
Intellisense също показва сигнатурата на метода, както е показано на фигура 54.
Фигура 54 Intellisense показва сигнатурата на
метода
Още
по интересно е, че предната декларация на обектната променлива позволява VB да свърже
обектния метод с актуалния адрес на функцията
по време на компилация -compile time. Това е известно
като ранно свързване -
early binding.
Алтернативна
декларация, която сочи класа е тази, наречена
родова (generic) декларация на обектна-променлива, която
използва As Object синтаксис:
Dim obj As Object
Защото
е вярно, че
obj може да съдържа връзка към всеки обект, ние плащаме данък за тази
привилегия. VB не може вече да дава информация
за класа и членовете му, защото не знае към какъв клас принадлежи обекта
- obj!
Като
резултат,
VB Intellisense не може да помага със синтаксиса
на членовете. VB не може да свързва тези свойства и методи на класа по време на
компилация--трябва да
почакатe до времето на изпълнение (
runtime). Това се нарича
късно свързване - late binding.
Очевидно
ранното свързване е по-добро и трябва да го използваме където е възможно.