Данная статья — с одной стороны — изначально задуманное продолжение моей первой статьи "«Миграция приложений — мифы и реальность», а с другой стороны — ответ на часть комментариев, которые задавали в статье Хабравчане vladsharikov, lair и berez.
Для начала, приведу пример конвертации кода на Delphi в код на C#:
После трансляции, код превращается в такой:
И да, код на C# работает после подключения миграционной библиотеки и компиляции.
Есть более сложные и интересные места — например, реализация свойств с индексами (если кто знает Delphi — поймут), к которым есть доступ по имени, то есть в форме Obj.Items[index], но прямо сейчас под рукой этого кода нет.
Накидал, по-быстрому, небольшое приложение на FoxPro, получилось вот такое:
Внешний вид в C# + WPF ниже.
Извините — полные варианты тем, с заменяемыми кнопками на заголовке окна и сменными же стилями заголовков, искать не стал
Если есть ещё вопросы по примерам конвертации — прошу в комментарии.
P.S. Перевод с Delphi на C# — один из проектов-тестов, которые использовались в процессе отладки конвертера.
P.P.S. Форма на FoxPro сделана «наспех», специально для демонстрации.
Конвертация кода с 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
Glass
Steel Blue gradient
Metro Light
Если есть ещё вопросы по примерам конвертации — прошу в комментарии.
P.S. Перевод с Delphi на C# — один из проектов-тестов, которые использовались в процессе отладки конвертера.
P.P.S. Форма на FoxPro сделана «наспех», специально для демонстрации.