vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Re: generische Klassen und Textbox 
Autor: Melkor
Datum: 05.04.07 21:48

Das Beispiel ist eigentlich Quatsch und funktioniert genauso gut wenn man alle (Of T) weglässt und Object benutzt. Ist wohl kein gutes Beispiel von generischen Klassen.

Und so hat man einfach Funktionen ohne umständlich für jede Klasse, die weggeschrieben werden soll (Of xxx) zu schreiben:
    Public Shared Function ObjektSpeichern( _
      ByVal Objekt As Object, _
      ByVal Speicherpfad As String) As Boolean
 
        Dim Serializer As System.Xml.Serialization.XmlSerializer
        Dim Stream As System.IO.FileStream = Nothing
 
        Try
            ' Stream zum Speichern öffen
            Stream = New System.IO.FileStream(Speicherpfad, _
              IO.FileMode.Create)
            ' Übergebene Klasse in das XML-Format serialisieren
            Serializer = _
              New System.Xml.Serialization.XmlSerializer( _
              Objekt.GetType)
            ' Objekt abspeichern
            Serializer.Serialize(Stream, Objekt)
            ' Stream wieder schließen
            Stream.Close()
 
            Return True
        Catch ex As Exception
            If Not Stream Is Nothing Then
                Stream.Close()
            End If
            Debug.Print("Fehler" & ex.Message)
            Return False
        End Try
    End Function
 
    Public Shared Function ObjektLaden( _
      ByVal Ladepfad As String, _
      ByVal Objekt As Type) _
      As Object
 
        Dim Serializer As System.Xml.Serialization.XmlSerializer
        Dim Stream As System.IO.FileStream = Nothing
 
        Try
            ' Stream zum Lesen äffen
            Stream = New System.IO.FileStream(Ladepfad, IO.FileMode.Open)
            ' Übergebene Klasse in das XML-Format serialisieren
            Serializer = _
              New System.Xml.Serialization.XmlSerializer(Objekt)
 
            Dim obj As Object = Serializer.Deserialize(Stream)
 
            ' Stream wieder schließen
            Stream.Close()
 
            Return obj
 
        Catch ex As Exception
            If Not Stream Is Nothing Then
                Stream.Close()
            End If
            Debug.Print("Fehler" & ex.Message)
            Return False
        End Try
    End Function
 
    Private Sub xsave()
 
        ' Objekt mit der Class1 zum Testen deklarieren
        Dim oSpeichern As New Class1
 
        ' Objekt befüllen
        oSpeichern.Boolean1 = True
        oSpeichern.Integer1 = 1234
        oSpeichern.String1 = "ABC"
        oSpeichern.String2 = "defg"
 
        ' Objekt auf dem Desktop speichern
        Dim sPfad As String
        sPfad = System.Environment.GetFolderPath( _
          Environment.SpecialFolder.Desktop)
        sPfad = sPfad & "\Test.xml"
        ObjektSpeichern(oSpeichern, sPfad)
    End Sub
 
    Private Sub xload()
 
        ' Objekt mit der Class1 zum Testen deklarieren
        Dim oLaden As Class1
 
        ' Objekt mit der Datei auf dem Desktop befüllen
        Dim sPfad As String
        sPfad = System.Environment.GetFolderPath( _
          Environment.SpecialFolder.Desktop)
        sPfad = sPfad & "\Test.xml"
        If IO.File.Exists(sPfad) Then
            oLaden = ObjektLaden(sPfad, GetType(Class1))
 
            ' Inhalt des Testobjekts in das Direktfenster ausgeben
            Debug.Print(CStr(oLaden.Boolean1))
            Debug.Print(CStr(oLaden.Integer1))
            Debug.Print(oLaden.String1)
            Debug.Print(oLaden.String2)
        Else
            Debug.Print("Die Datei: " & sPfad & " ist nicht vorhanden")
        End If
    End Sub
Was "Typsicherheit" betrifft, bei Save() ist das egal, beim Laden muss man entweder mit (Of Type) oder GetType(...) einen passenden Wert übergeben sonst klappt es nicht, so gesehen gehoppst wie gesprungen.

Das Beispiel wäre allerdings ein ganz wenig sinnvoller wenn man GetType(T) verwenden würde, sonst muss man schon ein Object übergeben, um Type abzufragen, was wirklich unsinnig ist.

Those people who think they know everything are a great annoyance to those of us who do - Isaac Asimov

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
generische Klassen und Textbox1.132Nikoman04.04.07 11:40
Re: generische Klassen und Textbox749t.b.d05.04.07 09:10
Re: generische Klassen und Textbox741Nexpert05.04.07 11:38
Re: generische Klassen und Textbox809t.b.d05.04.07 12:00
Re: generische Klassen und Textbox862Nexpert05.04.07 21:10
Re: generische Klassen und Textbox739Melkor05.04.07 21:48
mögliche Datentypen beschränken850Mika05.04.07 19:59
Re: mögliche Datentypen beschränken875Melkor05.04.07 20:35
Re: mögliche Datentypen beschränken857Mika30.04.07 11:48
Re: mögliche Datentypen beschränken730Moderatorralf_oop30.04.07 12:04
Re: mögliche Datentypen beschränken729Mika30.04.07 12:06
Re: mögliche Datentypen beschränken762Moderatorralf_oop30.04.07 12:14

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel