Миграция приложений — примеры кода

от автора

Данная статья — с одной стороны — изначально задуманное продолжение моей первой статьи "«Миграция приложений — мифы и реальность», а с другой стороны — ответ на часть комментариев, которые задавали в статье Хабравчане vladsharikov, lair и berez.

Конвертация кода с Delphi на C#

Для начала, приведу пример конвертации кода на Delphi в код на C#:

Код на Delphi

unit Unit3;  interface  type   TMyClass = class     _str: string;     constructor Create;     procedure setStr(s2: string);   public     class var       FClassField: integer;   end;   TMyClassD = class of TMyClass;  procedure DoSomeThing;  implementation  procedure DoSomeThing; begin  end; { TMyClass }  constructor TMyClass.Create; var   c: char;   i: byte;   cod: integer;   s: string;   cls: TMyClassD; begin   cls := TMyClass;   inherited;   DoSomeThing;   Val('5', i, cod);   c := '1';   s := c; end;  var   cls: TMyClass;   s: string;  procedure TMyClass.setStr(s2: string); begin   s2[4] := 'a'; end;  initialization   cls := TMyClass.Create;   s := '123456';   cls._str := s;   s[3] := '0';   cls.setStr(s); end. 

После трансляции, код превращается в такой:

Код C#

using System; using System.Runtime.InteropServices; using System.Collections.Generic; using System.Data; using System.Linq; using System.IO; using System.Text; using FastCode.Delphi.Core._System;  namespace Project3 {     public static partial class Unit3_Module {          public static void Unit3_Initialization_() {             cls = TMyClass.Create();             s = "123456";             cls._str = s;             //s[3] = '0';             s = s.Substring(0, 2) + '0' + s.Substring(3);             cls.setStr(s);         }           public static void DoSomeThing() {         }           internal static TMyClass cls;          internal static string s;     }     public partial class TMyClass : TObject {          public override void __Create__() {             Char c;             byte i;             int cod;             string s;             Class_of_TMyClass cls;             cls = Class_of_TMyClass.Instance;             base.__Create__();             Unit3_Module.DoSomeThing();             System_Module.Val('5'.ToString(), out i, out cod);             c = '1';             s = c.ToString();         }           public void setStr(string s2) {             //s2[4] = 'a';             s2 = s2.Substring(0, 3) + 'a' + s2.Substring(4);         }           public static TMyClass Create() {             TMyClass _instance = new TMyClass();             _instance.__Create__();             return _instance;         }           public string _str;          public static int FClassField;     }     public partial class Class_of_TMyClass {          protected Class_of_TMyClass() {         }           public TMyClass Create() {             return TMyClass.Create();         }           public static Class_of_TMyClass Instance = new Class_of_TMyClass();          public int FClassField { get { return TMyClass.FClassField; } set { TMyClass.FClassField = value; } }     } }  

И да, код на C# работает после подключения миграционной библиотеки и компиляции.
Есть более сложные и интересные места — например, реализация свойств с индексами (если кто знает Delphi — поймут), к которым есть доступ по имени, то есть в форме Obj.Items[index], но прямо сейчас под рукой этого кода нет.

Внешний вид в FoxPro

Накидал, по-быстрому, небольшое приложение на FoxPro, получилось вот такое:

Внешний вид в C# + WPF ниже.
Извините — полные варианты тем, с заменяемыми кнопками на заголовке окна и сменными же стилями заголовков, искать не стал

Здесь три дополнительных темы


Glass

Steel Blue gradient

Metro Light

Если есть ещё вопросы по примерам конвертации — прошу в комментарии.
P.S. Перевод с Delphi на C# — один из проектов-тестов, которые использовались в процессе отладки конвертера.
P.P.S. Форма на FoxPro сделана «наспех», специально для демонстрации.

ссылка на оригинал статьи http://habrahabr.ru/post/260023/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *