Autor Thema: Probleme mit Property Get/Set  (Gelesen 1892 mal)

Jürgen Schomann

  • Gast
Probleme mit Property Get/Set
« am: 02.09.14 - 15:39:00 »
Ich habe folgende Klassenbibliothek zum Testen

Class TestArray
   Private vValues As Variant
   
   Property Get Values As Variant
      Me.Values = Me.vValues
   End Property
   
   Property Set Values As Variant
      Me.vValues = Me.Values
   End Property

   Function GetValues As Variant
      Me.GetValues = Me.vValues
   End Function
End Class

und dazu folgenden Testagenten

Sub Initialize
   Dim ob As New TestArray
   Dim v As Variant
   Dim v0(1) As Variant
   Dim s0(1) As String
   
   v0(0) = "v0"
   v0(1) = "v1"
   s0(0) = "s0"
   s0(1) = "s1"
   
   ob.Values = s0
   
   'Test 1 - Fehler
   ForAll e1 In ob.Values
      MsgBox DataType(e1),,"Test 1"           'Fehlerhafte Datentyp-Werte z. B. 191, 10800 oder auch 0
   End ForAll
   
   'Test 2 - OK
   v = ob.Values
   ForAll e2 In v
      MsgBox DataType(e2),,"Test 2            'Datentyp 8 ok
   End ForAll
   
   'Test 3 - OK
   ForAll e3 In ob.GetValues
      MsgBox DataType(e3),,"Test 3           'Datentyp 8 ok
   End ForAll
End Sub

Die Properties erwarten als Typ Variant. Wenn ich ein Feld vom Typ String übergebe und über die Property Get in einer ForAll-Schleife die Werte abrufen will, bekomme ich einen Fehler wegen falschem Datentyp.
Ich habe deshalb über DataType den Datentyp ausgegeben und bekomme je nach Speicherkonstellation die unterschiedlichsten Werte wie oben im Kommentar angegeben. Richtig wäre ja der Wert 8 für String.
Dies ist ein stark abgerüsteter Test. In der eigentlichen Anwendung wird je nach Speicherkonstellation oft leer für den Wert ausgegeben oder Lotus Notes stürzt ab.
Wenn ich wie im 'Test 2' vorher den Wert der Property Get einer Variant-Variablen zuweise oder wie im 'Test 3' eine Funktion verwende ist alles richtig. Auch wenn ich statt eines String-Feldes ein Variant-Feld benutze laufen alle 3 Tests richtig.

Was ist die Ursache dafür, dass die Properties Get/Set den Typ Variant  nicht richtig behandeln?

Offline Andrew Harder

  • Senior Mitglied
  • ****
  • Beiträge: 295
  • Geschlecht: Männlich
Re: Probleme mit Property Get/Set
« Antwort #1 am: 09.09.14 - 21:27:00 »
Sorry, der Test läuft bei mir (zugegeben unter Notes 9, habe gerade keinen 8.5er zur Hand) einwandfrei  :-:

Mal ein Schuss ins blaue... versuche mal diese Klasse
Code
Class TestArray
	
	Private vValues As Variant
	
	Property Set Values As Variant
		Me.vValues = Values
	End Property
	
	Property Get Values As Variant
		Values = Me.vValues
	End Property
	
	Function GetValues As Variant
		GetValues = Me.vValues
	End Function
	
End Class
Andy

Jürgen Schomann

  • Gast
Re: Probleme mit Property Get/Set
« Antwort #2 am: 11.09.14 - 15:14:22 »
Vielen Dank für deine Antwort. Auch mit dem Vorschlag der geänderten Klasse bleibt es bei dem Fehler. Allerding ist die Referenz über Me doch sicherer, z. B. wenn man auch eine Property/Method mit gleichem Namen wie ein LotusScript-Schlüsselwort hat. Ich habe z. B. eine Klasse mit der Methode Implode, die aber nicht die Anweisung von LotusScript ist. Hier muss ich unbedingt Me.Implode verwenden.
Übrigens meine Teste sind alle unter Notes 8.5. gelaufen. Notes 9 werden ich in der Firma auch mal probieren und berichten.

Jürgen Schomann

  • Gast
Re: Probleme mit Property Get/Set
« Antwort #3 am: 24.09.14 - 17:37:42 »
Sorry, aber bei uns läuft es auch unter Notes 9 nicht richtig.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz