Autor: Thomas Reinwart 2008-05-05
office@reinwart.com
Source Code Konverter........................................................................................................................2 Online: (VB.net <-> C#) ....................................................................................................................3 Kommerzielle Produkte (VB, C#, C++, Java)..................................................................................... 3 Code Nachbearbeitung in der Praxis ............................................................................................... 4 Java (J2SE 5.0) and C# Comparison.................................................................................................. 5 VB.NET and C# Comparison............................................................................................................. 5 Zusammenfassung CodeKonvertierung..........................................................................................5
Welcher Entwickler stand noch nicht vor dem Problem, den Sourcecode einer Entwicklungssprache in eine andere zu übernehmen?
Die Gründe dafür können vielseitig sein:
Durch die .net runtime von Microsoft ist ein konvertieren des Sourcecodes wesentlich einfacher geworden. Entsprechende Tools gibt es am Markt.
Man kann allerding nicht immer davon ausgehen, dass es „sauber“ ist, ein Program 1 zu 1 zu konvertierten und damit weiter zu arbeiten. Jede Entwicklungssprache hat seine Eigenheiten, die in einer Sprache anderes oder optimaler gelöst werden können. Manche Code Konverter markieren die relevanten Stellen im Code mit Kommentaren, ein Nachbearbeiten ist also auf jeden Fall notwendig.
Beispiele dieser Stellen sind der eigene VB Namespace in der .net runtime, der zwar in einer C# Umgebung auch eingebunden werden kann, aber sehr unschön ist, da selbige Funktionen in der .net runtime ohnehin (unter anderem Namen und Parameter) abgedeckt sind. (Den VB Namespace in der .net runtime enthält viele gleichnamige VB 6.0 Methoden)
Oder auch Arrays, die in einer Sprache mit dem Index 0, in einer anderen mit dem Index 1 beginnen.
Eine Durchsicht des konvertierten Codes macht also auf jeden Fall Sinn, besonders dann, wenn der Code nicht von einem selber stammt. Hilfreich sind solche Code Konverter für einzelne Klassen oder Bereiche. Bei einer kompletten Anwendung würde ich das Grundgerüst in der neuen Sprache erstellen, und einzelne konvertierte Klassen Schritt für Schritt übernehmen.
Bei den Code Konvertern selber lassen es manche zu, eine .net Solution bzw. das Projekt File anzugeben und damit alles inkludierte zu konvertieren, anderen beschränken sich auf einzelne Files bzw. Klassen.
Wenn bei der Konvertierung folgende Punkte beachtet werden, wird sichergestellt, dass eine Anwendung am Ende zumindest gleichwertig wenn nicht besser wird:
http://www.carlosag.net/Tools/CodeTranslator/Default.aspx
http://labs.developerfusion.co.uk/convert/csharp-to-vb.aspx
http://codeconverter.sharpdevelop.net/Convert.aspx
http://converter.telerik.com/
Kommerzielle Produkte (VB, C#, C++, Java)
http://tangiblesoftwaresolutions.com
Je nach Komplexität und Umfang des Projekts gibt es mit Code Konvertern unterschiedliche Ergebnisse, also mehr oder weniger gut übersetzte Stellen, die manuell nachbearbeitet werden müssen.
Anbei ein Beispiel einer Code Konvertierung (VB.net -> C#) mit der „Tangible Software Solutions“ Anwendung, bei dem die Warnings nach der erfolgreichen Konvertierung sowohl als Zusammenfassung im Tool selber dargestellt als auch im Sourcecode als Kommentar eingefügt werden:
Der nächste Schritt für den Entwickler ist es, diese Stellen zu überarbeiten. Der direkte Codevergleich zwischen VB.net und dem neu erstellten C# ist zwecks Übersichtlichkeit möglich. Dabei wird alter (VB.net) und neu Code (C#) als Gegenüberstellung in zwei Fenstern dargestellt.
Hier einige häufig auftretende Beispiele: 1) Form Designer File Das Form Designer File muss nachbearbeitet werden, das Attribut von VB muss entfernt werden.
namespace Sample {
[Microsoft.VisualBasic.CompilerServices.DesignerGenerated()]
public partial class Report : System.Windows.Forms.Form {
2) Event Handler
//INSTANT C# NOTE: Converted event handlers:
this.KeyUp += new System.Windows.Forms.KeyEventHandler(ReportViewer_KeyUp); ReportViewer.Paint += new System.Windows.Forms.PaintEventHandler(ReportViewer_Paint); this.Paint += new System.Windows.Forms.PaintEventHandler(Report_Paint);
Hier wurde der Code automatisch ergänzt, das Handling hinter den neuen Events muss nachbearbeitet werden.
//INSTANT C# NOTE: This block was only required to support 'My.Settings' in VB. 'Properties.Settings' is used in C#:
‘My Settings’ wird in VB.net verwendet, um eigene Einstellungen der Anwendung zu speichern. Im Kommentar steht, was zu tun ist.
4) VB.net Functions – C# Methoden / Properties
Wenn in VB.net Funktionen verwendet wurden, muss die übersetze C# Methode auf Return Werte hin überprüft werden. Eine ausgedachte Businesslogik des Entwicklers bezüglich Return Werten kann natürlich kein Konverter erkennen.
//INSTANT C# NOTE: Inserted the following 'return' since all code paths must return a value in C#:
return false; // Dieser Wert wurde automatisch eingefügt.
Ein Vergleich der Syntaxunterschiede zwischen VB.net / C# und Java / C# ist hier zu finden und hilft, manche Details der Sprachunterschiede besser zu verstehen.
Java (J2SE 5.0) and C# Comparison
http://www.harding.edu/fmccown/java1_5_csharp_comparison.html
VB.NET and C# Comparison
http://www.harding.edu/fmccown/vbnet_csharp_comparison.html
Zusammenfassung Code Konvertierung