Instrukcja Property

Właściwość, zwana także polem lub atrybutem, charakteryzuje dany obiekt lub informację. Właściwości mogą służyć do kontrolowania dostępu do danych. Powszechne jest umieszczanie instrukcji przy ustawianiu lub odczytywaniu czasu właściwości. Kod może się różnić od prostego przypisania do złożonych procedur zależnych od kontekstu. Użycie akcesorów Get, Let lub Set wymusza spójność właściwości, gdy jest to konieczne.

warning

Ta instrukcja wymaga umieszczenia Option Compatible przed kodem programu wykonywalnego w module.


Składnia:

Diagram instrukcji Property Get


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

Diagram instrukcji Property Set Statement


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

Parametry:

name: Nazwa właściwości.

argument: Wartość, która ma zostać przekazana do procedury ustawiającej Property.

note

Funkcja ustawienia Property często przyjmuje pojedynczy argument. Dozwolone są jednak również argumenty wielokrotne.


Fragment argumentu

Fragment argumentu


      {[Optional [ByRef|ByVal]]|ParamArray} argument {{As typename|char}[ = expression]|[()]As Variant}
    
Parametry

Optional: Argument nie jest obowiązkowy.

ByRef: Argument jest przekazywany przez odwołanie. Wartość domyślna to WgRef.

ByVal: Argument jest przekazywany przez wartość. Jego wartość może być modyfikowana przez wywoływaną procedurę.

char: Wpisz znak deklaracji.

typename: Pierwotna nazwa typu danych. Można również określić typy zdefiniowane w bibliotece lub module.

= expression: Określ domyślną wartość argumentu, odpowiadającą zadeklarowanemu typowi. Optional jest konieczne dla każdego argumentu określającego wartość domyślną.

ParamArray: Użyj ParamArray, gdy liczba parametrów jest nieokreślona. Typowym scenariuszem jest funkcja zdefiniowana przez użytkownika programu Calc. Użycie ParamArray powinno być ograniczone do ostatniego argumentu procedury.

tip

Korzystanie z ParamArray lub = expression wymaga umieszczenia Option Compatible przed kodem programu wykonywalnego w module.


warning

Podczas używania argumentów Option VBASupport 1, Optional bez wartości domyślnej (= expression) są inicjowane zgodnie z ich typem danych, z wyjątkiem sytuacji, gdy Variant.


Fragment Typename

Fragment prymitywnych typów danych


      {Boolean|Byte|Currency|Date|Double|Integer|Long|Object|Single|String|Variant}
    
Fragment znaku

Znaki deklaracji typu


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

Przykłady


      Option Compatible
      Sub Main
          ProductName = "Office"
          Print ProductName ' wyświetla "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

W przypadku braku Property Let lub Property Set, Property Get pomaga zdefiniować chronione informacje, które nie mogą zostać przypadkowo zmienione przez obcy moduł:



      Option Compatible
      Public Property Get PathDelimiter As String ' Zmienna tylko do odczytu
          Static this As String
          If this = "" Then : Select Case GetGuiType()
              Case 1 : this = ";" ' Windows
              Case 4 : this = ":" ' Linux lub macOS
              Case Else : Error 423 ' Nie zdefiniowano właściwości lub metody: PathDelimiter
          End Select : End If
          PathDelimiter = this
      End Property ' PathDelimiter jest tylko do odczytu
      
      Sub Main
          PathDelimiter = "a sentence" ' nic nie robi
      End Sub
      
note

Użyj Let lub Set podczas obsługi usług UNO lub obiektów klas:



      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
      

Prosimy o wsparcie!