Class Properties - Set-Funktion verändert die falsche Property

  • VB.NET
  • .NET (FX) 4.0

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von BeSt.

    Class Properties - Set-Funktion verändert die falsche Property

    Hallo.

    Ich habe in VB.NET eine Klasse programmiert.
    Diese sieht vereinfacht so aus:

    Quellcode

    1. Public Class cMandant
    2. Public Property nr as Long
    3. Private _dat as Date
    4. Public Property dat as Long
    5. Set(ByVal value as Long)
    6. _dat = getDateFromDays(value)
    7. End Set
    8. Get
    9. Return _dat.ToString("dd.MM.yyyy")
    10. End Get
    11. End Property
    12. Public Sub New()
    13. nr = 100
    14. dat = 39796
    15. End Sub
    16. End Class


    Sinn des ganzen ist folgendes: In einer alten Anwendung auf IBM-Großrechnerbasis wurden Daten im Format "Tage seit 01.01.1900" gespeichert. Ich will die Inhalte eines Mandanten aus dieser Anwendung lesen und in der erstellten Klasse speichern. Die Funktion getDateFromDays rechnet die Tages-Datum-Werte in das entsprechende Date-Objekt um.

    Soweit so gut. In dem Feld _dat steht nach der Initialisierung auch das richtige Datum 15.12.2008 drin.
    Aber in dem Feld dat steht direkt nach der Zeile _dat = getDateFromDays(value) im Setter nicht mehr der Wert 39796, sondern der Wert 15122008 - also das berechnete Datum ohne Punkte.

    Dadurch funktioniert natürlich der Getter nicht mehr richtig und das ganze Ding ist nicht mehr nutzbar.

    Kann mir jemand helfen? Warum wird der Wert von dat verändert, wenn ich _dat einen Wert zuweise?
    Hab ich etwas übersehen?

    Vielen Dank für jede Hilfe.

    BeSt

    Die Farbe "Rot" ist der Moderation vorbehalten. => Farbe angepasst.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Trade“ ()

    Okay. Ich dachte, dass der Setter von dat nur das Private Property ​_dat verändert.

    Kann ich das irgenwie hinbekommen? Denn ich brauche in der Property ​dat weiterhin den Tages-Wert und der Property _dat den Date-Wert.

    Danke für die Hilfe...
    Ich versuche zu erklären, was ich vorhatte:

    Ich lese die Werte von cMandant​ aus einer MySQL-Datenbank. Dabei fülle ich alle Properties von cMandant in einer Schleife:

    Quellcode

    1. ​Public Sub New(ByVal dr As MySqlDataReader)
    2. Dim type As Type = Me.[GetType]()
    3. Dim flags As BindingFlags = BindingFlags.[Public] Or BindingFlags.Instance
    4. Dim properties As PropertyInfo() = type.GetProperties(flags)
    5. For Each [property] As PropertyInfo In properties
    6. [property].SetValue(Me, dr([property].Name), Nothing)
    7. Next
    8. End Sub


    Wenn dann mal der Inhalt der DB in der Klassen-Instanz cMandant ist, dann fülle ich die Textboxen einer Form mit den Inhalten der Klassen-Instanz. Die Textboxen der Form haben als Namen die mySQL-Feldnamen, die ja auch die Proptery-Names sind.

    Das Füllen der Textboxen sieht dann so aus:

    Quellcode

    1. ​Public Sub fillForm(ByVal mand As cMandant)
    2. Dim type As Type = mand.[GetType]()
    3. Dim myPropInfo As PropertyInfo
    4. Dim txts As Object = GetAll(Me, GetType(TextBox))
    5. For Each txt As TextBox In txts
    6. myPropInfo = type.GetProperty(txt.Name)
    7. txt.Text = myPropInfo.GetValue(mand, Nothing)
    8. Next
    9. End Sub


    Jetzt komme ich auf das Problem: Wenn die New-Funktion das Feld ​dat aus der DB liest, dann sieht sie, dass das ein Long ist. Deswegen ist der Type der Property ​dat ebenfalls ein Long. In die Textbox auf der Form will ich aber nicht den Tages-Wert schreiben, sondern ein lesbares Datum. Deswegen habe ich das Private Property ​_dat eingefügt und hoffte, dass ich mit dem Setter von ​dat (da die Schleife ja diesen Feldnanmen verwendet) lediglich dieses Private Property ​_dat setzen kann und mit dem Getter von ​dat dann eben den String zurückgegeben bekomme.

    Ich hoffe ich habe es verständlich ausgedrückt. Ich habe das Problem jetzt erkannt, weiß aber noch keine Lösung dafür.

    Gibt es dafür einen Tip?

    Danke.

    LG
    BeSt