Die Community zu .NET und Classic VB.
Menü

Tipp-Upload: VB.NET 0330: VB2008 auf VB2005 downgraden

 von 

Über den Tipp  

Dieser Tippvorschlag ist noch unbewertet.

Der Vorschlag ist in den folgenden Kategorien zu finden:

  • Sonstiges
  • Sprachmerkmale

Dem Tippvorschlag wurden folgende Schlüsselwörter zugeordnet:
extension,extension method,type inference, Lambda,anonyme methode

Der Vorschlag wurde erstellt am: 07.01.2009 18:36.
Die letzte Aktualisierung erfolgte am 07.01.2009 18:47.

Zurück zur Übersicht

Beschreibung  

Die wohl am häufigsten verwendeten Features von VB2008, Extension-Methods und Type-Inference, sind relativ leicht an VB2005 anzupassen
Selbst Lambda-Ausdrücke sind i.a. unter erträglichem Aufwand konvertierbar - man muß halt statt der anonymen Methoden "richtige" Methoden implementieren.

Schwieriger wird es, die vielen z.T. sehr trickreichen Extension-Methods des neuen Namespaces System.Linq zu substituieren.

Schwierigkeitsgrad

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

Download:

Download des Beispielprojektes [19,13 KB]

' Dieser Source stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!
'
' Beachten Sie, das vom Designer generierter Code hier ausgeblendet wird.
' In den Zip-Dateien ist er jedoch zu finden.

' ----------- Anfang Projektgruppe DownGradeVB.sln -----------
' ---------- Anfang Projektdatei DownGradeVB.vbproj ----------
' ----------------- Anfang Datei Module1.vb  -----------------
' IDE-Voreinstellungen:
' Option Explicit On
' Option Strict On
' Option Infer On

Imports System.IO

Module Module1

    Private Const Ranking As String = _
        "AaÄäBbCcDdEeFfGgHhIiJjKkLlMmNnOoÖöPpQqRrSsßTtUuÜüVvWwXxYyZz., +-/*_"

    Private Const Text As String = "Um ein Haar hätte ich die Türe doch geöffnet..."

#If VBC_VER = 9.0 Then

    ' VB2008-Compiler-Version 9.0: Extension-Method WriteTo() kann wie eine Objekt-Methode
    ' aufgerufen werden (Unterstützung durch Intellisense!)
    Sub Main()

        ' Datei kopieren
        Using ReadStream As New FileStream("Test.doc", FileMode.Open), WriteStream As New _
            FileStream( "Test2.doc", FileMode.Create)

            ReadStream.WriteTo(WriteStream)
        End Using

        Console.WriteLine("Copying done.")
        Console.WriteLine("press enter to continue.")
        Console.ReadLine()

        ' Buchstaben nach benutzerdefiniertem Ranking sortieren
        ' compare-Methode als Lambda-Ausdruck
        Dim compare As Comparison(Of Char) = Function(c1, c2) Ranking.IndexOf(c1) - _
            Ranking.IndexOf(c2)

            Dim Chars = New List(Of Char)(Text.ToCharArray)

            Chars.Sort(compare)
            Console.WriteLine(New String(Chars.ToArray))
            Console.WriteLine("press enter to finish.")
            Console.ReadLine()

        End Sub

#Else

        ' niedrigere Versionen des VB-Compilers: WriteTo() "gewöhnlich" aufrufen
        Sub Main()

            ' Datei kopieren
            Using ReadStream As New FileStream("Test.doc", FileMode.Open), WriteStream As New _
                FileStream( "Test2.doc", FileMode.Create)

                WriteTo(ReadStream, WriteStream)
            End Using

            Console.WriteLine("Copying done.")
            Console.WriteLine("press enter to continue.")
            Console.ReadLine()

            ' Buchstaben nach benutzerdefiniertem Ranking sortieren
            Dim Chars as New List(Of Char)(Text.ToCharArray)

            Chars.Sort(AddressOf compare)
            Console.WriteLine(New String(Chars.ToArray))
            Console.WriteLine("press enter to finish.")
            Console.ReadLine()

        End Sub

        ' reguläre compare-Methode
        Private Function compare(ByVal c1 As Char, ByVal c2 As Char) As Integer

            Return Ranking.IndexOf(c1) - Ranking.IndexOf(c2)

        End Function

#End If

    End Module

    ' ------------------ Ende Datei Module1.vb  ------------------
    ' ----------------- Anfang Datei StreamX.vb  -----------------

    Imports System.Runtime.CompilerServices
    Imports System.IO

    Public Module StreamX

        ' VB2008-Extension-Methods: Das <Extension()>-Attribut bewirkt, daß sie wie
        ' ObjektMethoden aufrufbar sind, incl. Unterstützung durch die Intellisense

#If VBC_VER = 9.0 Then

        <Extension()> _
            Public Sub WriteTo( _
                  ByVal ReadStream As Stream, _
                  ByVal WriteStream As Stream, _
                  Optional ByVal BytesToRead As Long = -1, _
                  Optional ByVal Bufsize As Short = Short.MaxValue)

            If BytesToRead < 0 Then BytesToRead = ReadStream.Length

            Dim Buf(Bufsize - 1) As Byte

            Do

                ' Typ-Inference: Der Compiler erkennt den Typ von Portion anhand des
                ' Rückgabetyps von ReadStream.Read()
                Dim Portion = ReadStream.Read(Buf, 0, CInt(Math.Min(BytesToRead, Bufsize)))

                BytesToRead -= Portion
                WriteStream.Write(Buf, 0, Portion)
            Loop Until BytesToRead = 0

        End Sub

#Else

        ' Downgrade: das <Extension()> - Attribut wurde entfernt, und der Datentyp von
        ' Portion explizit angegeben

        Public Sub WriteTo( _
                  ByVal ReadStream As Stream, _
                  ByVal WriteStream As Stream, _
                  Optional ByVal BytesToRead As Long = -1, _
                  Optional ByVal Bufsize As Integer = Short.MaxValue)

            If BytesToRead < 0 Then BytesToRead = ReadStream.Length

            Dim Buf(Bufsize - 1) As Byte

            Do

                ' Kopier-Schleife von ReadStream -> WriteStream
                Dim Portion As Integer = ReadStream.Read(Buf, 0, CInt(Math.Min(BytesToRead, _
                    Bufsize)))

                BytesToRead -= Portion
                WriteStream.Write(Buf, 0, Portion)
            Loop Until BytesToRead = 0

        End Sub

#End If

    End Module

    ' ------------------ Ende Datei StreamX.vb  ------------------
    ' ----------- Ende Projektdatei DownGradeVB.vbproj -----------
    ' ------------ Ende Projektgruppe DownGradeVB.sln ------------

	

Diskussion  

Diese Funktion ermöglicht es, Fragen, die die Veröffentlichung des Tipps betreffen, zu klären, oder Anregungen und Verbesserungsvorschläge einzubringen. Nach der Veröffentlichung des Tipps werden diese Beiträge nicht weiter verlinkt. Allgemeine Fragen zum Inhalt sollten daher hier nicht geklärt werden.
Folgende Diskussionen existieren bereits

VB 2008 <=> VB 2005 - Dario 07.01.2009 19:31

Um eine Diskussion eröffnen zu können, müssen sie angemeldet sein.