Оператор Property

Свойствата, наричани още полета или атрибути, характеризират даден обект или фрагмент информация. Свойствата могат да се използват за управление на достъпа до данни. В тях обикновено се включват инструкции, изпълнявани при задаване или четене на свойството. Кодът може да бъде както просто присвояване, така и сложни зависими подпрограми. Чрез методите Get, Let и Set може да се налагат условия за валидност на свойствата.

warning

Този оператор изисква Option Compatible да предхожда изпълнимия програмен код в модула.


Синтаксис:

Диаграма на оператора Property Get


         [Private | Public] Property Get name[char | As typename]
         End Property
      

Диаграма на оператора Property Set


         [Private | Public] Property [Let | Set] name[char] [([Optional [ByRef | ByVal]]value[char | As typename])] [As typename]
         End Property
      

Параметри:

name: името на свойството.

argument: стойност, която да бъде предадена на зададената с оператора Property подпрограма за присвояване.

note

Задаваните с оператора Property функции за присвояване обикновено използват единствен аргумент. Допускат се и по няколко аргумента.


фрагмент argument

фрагмент „аргумент“


      {[Optional [ByRef|ByVal]]|ParamArray} argument {{As typename|char}[ = expression]|[()]As Variant}
    
Параметри

Optional: аргументът не е задължителен.

ByRef: аргументът се предава по адрес. ByRef се подразбира.

ByVal: аргументът се предава по стойност. Стойността му може да се променя от извиканата подпрограма.

char: знак за деклариране на тип.

typename: име на примитивен тип данни. Могат да се задават и типове, дефинирани в библиотека или модул.

= expression: задава подразбирана стойност за аргумента, съответстваща на декларирания му тип. Всеки аргумент с указана стойност по подразбиране трябва да е придружен с Optional.

ParamArray: използвайте ParamArray, когато броят на параметрите е неопределен. Типичен пример са дефинираните от потребителя функции за Calc. Употребата на ParamArray трябва да е ограничена до последния аргумент на подпрограмата.

tip

Използването на ParamArray или = expression изисква поставянето на Option Compatible преди изпълнимия програмен код на модула.


warning

Когато се използва Option VBASupport 1, аргументите с Optional и без подразбирана стойност (= expression) се инициализират според своя тип данни, освен ако е Variant.


фрагмент typename

фрагмент „примитивни типове данни“


      {Boolean|Byte|Currency|Date|Double|Integer|Long|Object|Single|String|Variant}
    
фрагмент char

знаци за деклариране на тип


      { % | & | ! | # | $ | @ }
    

Примери


      Option Compatible
      Sub Main
          ProductName = "Office"
          Print ProductName ' показва "LibreOffice"
      End Sub
      
      Private _office As String
      Property Get ProductName As String
          ProductName = _office
      End Property
      Property Let ProductName(value As String)
          _office = "Libre"& value
      End Property
      
tip

При отсъствието на Property Let или Property Set, Property Get позволява задаване на защитена информация, която не може да бъде променена случайно от външен модул:



      Option Compatible
      Public Property Get PathDelimiter As String ' Променлива само за четене
          Static this As String
          If this = "" Then : Select Case GetGuiType()
              Case 1 : this = ";" ' Windows
              Case 4 : this = ":" ' Linux или macOS
              Case Else : Error 423 ' Недефинирано свойство или метод: PathDelimiter
          End Select : End If
          PathDelimiter = this
      End Property ' PathDelimiter само за четене
      
      Sub Main
          PathDelimiter = "a sentence" ' Не прави нищо
      End Sub
      
note

Използвайте Let или Set, когато боравите с услуги на UNO или обекти от класове:



      Option Compatible
      Sub Main
          'Set anObject = CreateUnoService( "com.sun.star.frame.Desktop" )
          anObject = CreateUnoService( "com.sun.star.frame.Desktop" )
          Print anObject.SupportedServiceNames(0) ' displays "com.sun.star.frame.Frame"
      End Sub
      
      Property Get anObject As Object
          Set anObject = _obj
      End Property
      
      Private _obj As Object
      
      'Property Set anObject(value As Object)
          'Set _obj = value.CurrentFrame
      'End Property
      Property Let anObject(value As Object)
          Set _obj = value.CurrentFrame
      End Property
      

Моля, подкрепете ни!