Methode Open in vererbte Dictionary(Of K, V) sich selbst zuordnen

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Dodo.

    Methode Open in vererbte Dictionary(Of K, V) sich selbst zuordnen

    Hey Leute,

    ich Programmiere nun wieder ein bischel mit VB und bin bislang immer gut selbst zurecht gekommen, allerdings stehe ich nun vor einem Problem das ich irgendwie nicht selbst lösen kann und hoffe das ihr mir Helfen könnt.

    Ich habe eine Serialisierbare Klasse die von Dictionary(Of K, V) erbt. Das Serialisieren und Deseralisieren funktioniert auch wunderbar, wenn es externe Methoden sind. Nun möchte ich die Methoden allerdings in der Klasse selbst haben, damit ich einfach MeineKlasse.Save(Filename) aufrufen kann.

    Allerdings weiß ich nun nicht wenn ich das deserialisierte Object von meiner Klasse habe, wie es es ihr selbst zuordne.

    VB.NET-Quellcode

    1. Me = DirectCast(bf.Deserialize(fs), StoreCollection)


    funktioniert leider nicht.

    Hier meine ganze Klasse (bzw. das was wichtig ist davon)

    Spoiler anzeigen

    VB.NET-Quellcode

    1. <Serializable()> _
    2. Public Class StoreCollection
    3. Inherits Dictionary(Of String, StoreItem)
    4. Implements ISerializable
    5. Public Sub New()
    6. MyBase.New()
    7. End Sub
    8. Public Sub New(ByVal info As System.Runtime.Serialization.SerializationInfo, ByVal context As System.Runtime.Serialization.StreamingContext)
    9. MyBase.New(info, context)
    10. End Sub
    11. Private Sub Save(ByVal Filename As String)
    12. Using fs As New FileStream(Filename, FileMode.Create)
    13. Dim bf As New BinaryFormatter()
    14. bf.Serialize(fs, Me)
    15. fs.Close()
    16. End Using
    17. End Sub
    18. Private Sub Open(ByVal Filename As String)
    19. If File.Exists(Filename) Then
    20. Using fs As New FileStream(Filename, FileMode.Open)
    21. Dim bf As New BinaryFormatter()
    22. ' das hier funktioniert leider so nicht :-(
    23. Me = DirectCast(bf.Deserialize(fs), StoreCollection)
    24. fs.Close()
    25. End Using
    26. End If
    27. End Sub
    28. End Class
    Wurde ich auch sagen. Mach Open statisch, und dann von außerhalb Dim sc As StoreCollection = StoreCollection.Open(path)
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Stimmt, wenn einem die einfachte Lösung nicht in den Sinn kommt *g* ich denke immernoch zuviel in anderen Programmiersprachen wo das so funktioniert hätte.

    Danke ;)


    Edit: hmm aus irgendeinem Grund kann ich keine Static Methode in der Klasse schreiben, vlt. weil sie von Dictionary erbt? Wenn ich schreibe

    VB.NET-Quellcode

    1. Public Static Function FromFile(ByVal Filename As String) As StoreCollection


    Bekomme ich als Fehler

    Quellcode

    1. Methoden können nicht als "Static" deklariert werden.


    Edit2: Ach ich mache zuviel mit anderen Sprachen :P unter vb heißt es ja Shared und nicht Static, klar das ich da nen Fehler bekommen *ditsch*

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Dodo“ ()