Sprachenintegration in .NET
Geschrieben von: Christoph Wille Unter .NET sticht ein Feature besonders heraus - die Programmiersprachen setzen auf einem gemeinsamen Substrat auf, der Common Language Runtime (CLR). Dadurch wird eine Sprachintegration möglich, die es zuvor nicht gab: Klassen, die in Programmiersprache A entwickelt wurden, können in Programmiersprache B verwendet werden - und es kommt sogar besser: man kann über Sprachgrenzen Klassen voneinander ableiten! Dieses Ableiten könnte so aussehen: die Basisklasse wird zB in C# entwickelt, und andere Programmierer - zB VB.NET Programmierer - leiten von dieser Basisklasse Subklassen in VB.NET ab. Solange sich alle beteiligten Programmierer an die Common Language Specification (CLS) halten, kein Problem. Apropos CLS: diese definiert welche Datentypen in allen Sprachen existieren müssen, und daher in öffentlich zugänglichen Teilen der Klassen exklusiv verwendet werden dürfen (mehr zur CLS findet man in der .NET SDK Dokumentation). Heute wollen wir uns die Sprachintegration auf Ebene der Klassenprogrammierung in der Praxis genauer ansehen. Und zwar mit Code und Debugger! Die Probe aufs ExempelAls Programmierer glaubt man es erst, wenn man es wirklich sieht. Aus diesem Grund habe ich folgendes Beispiel konstruiert: Eine Basisklasse wird in VB.NET implementiert (namens MyBaseClass). Diese enthält eine überladbare Funktion SayHello, sowie eine öffentliche Add Funktion als auch eine protected-Variante derselben namens InternalAdd. Die Klasse ist im Namespace InheritanceSamples gekapselt, die Klasse wird in eine Library Assembly (DLL) kompiliert. Basierend auf der Basisklasse leite ich in C# die Klasse MySubClass ab. Diese überladt SayHello, und fügt eine Funktion Compute ein, die die protected Methode InternalAdd aufruft. Zusätzlich findet sich noch die Klasse App in der C# Datei, die uns ein Testprogramm für die Kommandozeile bereitstellt (könnte aber genauso gut getrennt, und in einer anderen Programmiersprache geschrieben sein). Die BasisklasseWas die Basisklasse tut, habe ich bereits besprochen. In der Datei MyBaseClass.vb findet sich die entsprechende Implementierung: Imports System Namespace InheritanceSamples Public Class MyBaseClass Public Overridable Function SayHello() As String Return "Hello World from VB" End Function Public Function Add(nA As Long, nB As Long) As Long Return (nA+nB) End Function Protected Function InternalAdd(nA As Long, nB As Long) As Long Return (nA+nB) End Function End Class End Namespace Kompiliert wird alles mit dem folgenden Kommando: vbc /debug+ /t:library MyBaseClass.vb Das debug+ Statement wird uns dann später erlauben, die Anwendung zu debuggen. Die abgeleitete KlasseWie versprochen ist die abgeleitete Klasse in C# implementiert (MySubClass.cs). In App.Main rufe ich verschiedene Methoden der abgeleiteten Klasse als auch der Basisklasse auf (Testszenarien): using System; using InheritanceSamples; public class MySubClass : MyBaseClass { public override string SayHello() { return "Hello World from C#"; } public long Compute() { return InternalAdd(3, 8); } } public class App { static void Main() { MySubClass objSubClass = new MySubClass(); Console.WriteLine(objSubClass.SayHello()); Console.WriteLine(objSubClass.Add(5, 10)); Console.WriteLine(objSubClass.Compute()); MyBaseClass objBaseClass = new MyBaseClass(); Console.WriteLine(objBaseClass.SayHello()); } } Kompiliert wird das ganze wie folgt: csc /r:MyBaseClass.dll /debug+ /out:client.exe /main:App MySubClass.cs Der Output der Applikation sieht so aus: Hello World from C# 15 11 Hello World from VB Die Applikation bestehend aus mehreren Programmiersprachen funktioniert also - was hinter den Kulissen passiert, werden wir uns nun mit dem Debugger ansehen. Debuggen von mehrsprachigen AnwendungenNetterweise bekommt man im SDK einen Debugger mitgeliefert. In der Beta 2 hatte er allerdings noch keinen Menüeintrag, man mußte ihn direkt aus dem GuiDebug Verzeichnis starten: Da unsere Applikation schon kompiliert vorliegt, wählen wir diese mittels Debug/Program to Debug: In der Dialogbox kann man nach client.exe suchen: Damit könnte man bereits eine Debug-Session starten (einfach F5 drücken). Allerdings sollte man vorher noch in der Datei MySubClass.cs einen Breakpoint auf die erste Zeile der Main Methode setzen, weil sonst läuft das Programm einfach durch: So - und jetzt aber starten wir die Debugging-Session mit F5. Wie erwartet stoppt die Programmausführung auf unserem Breakpoint, ich bin aber bereits mit Step Over auf den Aufruf der Add Methode gegangen: Dort verwende ich Step Into - und et voila, ich lande im Sourcecode meiner VB.NET Klasse! Es ist jeder aufgefordert, das auszuprobieren - ja, das Debuggen von mehrsprachigen .NET Anwendungen ist so einfach! SchlußbemerkungProgrammiersprachen können unter .NET sehr einfach miteinander verbunden werden - und steht diese Verbindung, ist auch das Testen solcher Anwendungen kein Problem. Also genau das Gegenteil dessen, was man vor .NET gewöhnt war. Download des CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
.NET auf Warp 9 beschleunigen: Ngen Wenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Eine weitere sehr hilfreiche Resource ist das deutsche ASP.NET Wiki, das als zentrale Anlaufstelle für Tips, Tricks, Know How und alles Nützliche was man in seinem Alltag als (ASP).NET-Entwickler so braucht und entdeckt gedacht ist. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |