Property(активные свойства)

Сказать по чести, я не разу их не применял, как то не нужно было. Но объяснить принцип их работы попробую. По сути Property есть ничто иное как две (именно 2) функции, но с чуть хитренькими возможностями и синтаксисом. Эти 2 функции имеют одинаковые имена, но одна из них работает на прием, друга на отдачу. Пример:

Type T
   Dim A As Integer
   Declare Property PR() As Integer
   Declare Property PR( Byval nevVal As Integer)
End Type 

Property T.PR() As Integer
   Return A
End Property 

Property T.PR( Byval A As Integer)
   this.A=A
End Property 

Dim A As T
A.PR=44
? A.PR
Sleep

Давайте, чтобы было более понятно, я в данной статье дальше активные свойства буду называть методами, думается мне так будет более удобочитаемо. Мы создали класс, в котором одно простое свойство и два метода. Обратите внимание, у первого из методов в конце указывается тип возвращаемого значения, он работает на отдачу. Второй подобен процедуре, может только принимать значения. Мы как раз ему и передаем в параметре значение 44 , которое он сохраняет в одном из свойств класса. А первый метод при вызове, возьмет значение из свойства и вернет нам его.

Вся необычность заключается только в передаче параметра принимаемому методу. Обратите внимание на то, что у принимаемого метода есть один входящий параметр (может быть много). С другой стороны, вызов не похож на вызов процедуры, а больше похоже на поле структуры, которому присваивается значение.

Из примера:

Метод (с одним параметром):

Property T.PR( Byval A As Integer)

Его вызов:

A.PR=44

Метод, который расчитан на прием, берет значение, которое мы присваиваем ему после знака равно и помещает себе в последний параметр. Ведь это только у нас передается один параметр, можно передать столько столько требуется. Пример:

Type T
   Dim A As Integer
   Declare Property PR(B As String) As Integer
   Declare Property PR( Byval A As Integer, Byval B As Integer)
End Type 

Property T.PR(B As String) As Integer
   Print B;
   Return A
End Property 

Property T.PR( Byval A As Integer, Byval B As Integer)
   Print B
   this.A=A+B
End Property 

Dim A As T
A.PR(56)=44  'вместо привычного A.PR(56,44)
? A.PR("Result=")
Sleep


Все кроме последнего параметра передаются в скобках, последний передается после знака равно. Так же вы можете заметить, что возвращаемый метод, тоже имеет один параметр. Кстати он как раз больше одного параметра иметь и не может.

Собственно про property рассказывать больше нечего. Где и в каких местах кода вы будете их использовать, решать вам.

 Всего доброго!

содержание | назад | вперед