Ja my! Mystens gibt es ja Diskussionen zwischen VB.NETlern und C#-Anhängern, welches denn jetzt die bessere Programmiersprache ist. Die offizielle Aussage von Mycrosoft war ja immer: Beide sind gleichgut. Myne Mynung zu diesem Thema ist ja hinlänglich bekannt und wird jetzt noch durch das neue, geile My-Template untermauert. Das gibt's nämlich nur für VB.NET!
Genug gekalauert. Das My-Template bietet eine Abkürzung zu den meisten, täglich anfallenden Aufgaben bei der Programmierung. Beispiel gefällig?
Aus:
Dim File As New System.IO.StreamReader("c:\test.txt")Dim Words As String = File.ReadToEnd()File.Close()
Wird:
Dim Words As String = _ My.Computer.FileSystem.ReadAllText("c:\test.txt")
Gut, was? Folgendes war schon immer üble Steinzeit:
Private Declare Auto Function PlaySound Lib "winmm.dll" _ (ByVal lpszSoundName As String, ByVal hModule As Integer, _ ByVal dwFlags As Integer) As IntegerPrivate Const SND_FILENAME As Integer = &H20000
Dim bAns As Boolean, iRet As Integer = 0Try iRet = PlaySound("C:\sound.wav", 0, SND_FILENAME)CatchEnd Try
Dieser wunderschöne Code wird jetzt aufgeräumt zu:
My.Computer.Audio.Play ("C:\sound.wav")
Im My-Namespace finden sich sieben sogenannte Rootobjekte, die jewils selbstbeschreibend Zugriff auf bestimmte Funktionalitäten und Tools geben:
Aber das kann man natürlich woanders nachlesen. Mein Tip: Das My-Objekt läßt sich auch prima erweitern. Das betrifft sowohl die Erweiterung der Rootobjekte selbst als auch das Hinzufügen neuer Rootobjekte.
Ein Beispiel: Firma VB-Trans, eine Spedition, muß sehr viele Programme schreiben, die einen an den Computer angeschlossenen Barcodescanner benutzen. Kann man das My.Computer-Objekt, das ja Zugriff auf solche Dinge wie Schnittstellen und Geräte bietet, um Barcodescanner-Funktionen erweitern, die dann über My.Computer.Barcode ansprechbar sind? Ja man kann. Und so geht's:
Namespace My
Public Class BarcodeReader
Public Function Scan() As String Return "Ein toller Barcode" End Function
End Class
Partial Class MyComputer
Private _BarcodeReader As BarcodeReader
Public ReadOnly Property BarCodeReader() As BarcodeReader Get If _BarcodeReader Is Nothing Then _BarcodeReader = New BarcodeReader End If Return _BarcodeReader End Get End Property
End Namespace
Hier ist bemerkenswert, daß nicht die Klasse Computer im Namespace My erweitert wird, sondern (aufpassen!) die Klasse MyComputer im Namespace My. Trotzdem wird die Funktion Scan nachher über
My.Computer.BarcodeReader.Scan()
angesprochen? Wie kann das sein? Ganz einfach: Der VB.NET-Compiler übersetzt die Aufrufe entsprechend: In Wirklichkeit ist Computer eine nämlich öffentliche Eigenschaft der MyComputer-Klasse - dies verheimlicht uns VB.NET durch fiese Tricks aber vollständig. Mit ildasm kommt man dem Spuk aber auf die Schliche.
Das Erweitern der MyComputer-Klasse ist aber durch die neuen partiellen Klassen sehr einfach: Unsere eigene Barcode-Funktionalität wird beim Kompilieren mit der "eingebauten" MyComputer-Klasse zusammengefügt und in eine einzige kompilierte Klasse gepackt.
Analog funktioniert das Erstellen eigener Rootobjekte. Als alter Philosoph wünschte ich mir, jeden Tag einen neuen Sinnspruch beim Start meiner Applikation anzeigen zu können - Zeit für ein My.ThoughtOfTheDay-Objekt. Kein Problem. Einfach eine Bibliothek zur Philosophiegenerierung (PhilosophyLib) samt Funktion GetDeepTought() geschrieben und folgendermaßen als Rootobjekt in den My-Namespace integriert:
Imports PhilosophyLib
Friend Module My_ThoughtOfTheDay
Private _ThoughtOfTheDay As ThoughtOfTheDay
Public ReadOnly Property ThoughtOfTheDay() As ThoughtOfTheDay Get If _ThoughtOfTheDay Is Nothing Then _ThoughtOfTheDay = New ThoughtOfTheDay Return _ThoughtOfTheDay End Get End Property
End Module
So entsteht ein neues Rootobjekt:
My.ThoughtOfTheDay.GetDeepTought()
Ich habe zu beiden Vorgehensweisen zwei kleine Beispielprojekte gestrickt, die hier zu finden sind. Da diese Projekte jedoch mit einem Microsoft-internen Build der Beta 2 von VB.NET Express erstellt wurden können My-Fans (bzw. my fans :-) das Ganze erst ausprobieren, wenn demnächst endlich die finale, öffentliche Beta 2 erscheint. Bis dahin kann man die Beispiele natürlich mit einem handelsüblichen Texteditor betrachten und sich in Vorfreude üben - ist ja bekannlich die schönste Freude (meines Erachtens ist dieses Sprichwort Schwachsinn. Ich will alles, und zwar jetzt. Aber das gehört ja nicht zum Thema.)
Viel Spaß also mit dem My-Template und selbstgebastelten Funktionen wie My.Computer.Needs.More.Memory etc...