Как мне преобразовать код Java в код C #?

m портирование библиотеки Java на C #. Я'я использую Visual Studio 2008, поэтому я нене иметь прекращенной программы Microsoft Java Language Conversion Assistant (JLCA).

Мой подход состоит в том, чтобы создать новое решение с аналогичной структурой проекта в библиотеке Java, а затем скопировать Java-код в файл c # и построчно преобразовать его в действительный c #. Учитывая, что я нахожу Java легким для чтения, тонкие различия в двух языках меня удивили.

Некоторые вещи легко переносить (пространства имен, наследование и т. Д.), Но некоторые вещи неожиданно отличались, например, видимость закрытых членов во вложенных классах, переопределение виртуальных методов и поведение встроенных типов. Я неЯ не совсем понимаю эти вещи, и яя уверен, что есть много других отличий, которых у меня нетеще не видел.

у меня есть долгий путь для этого проекта. Какие практические правила я могу применить во время этого преобразования, чтобы правильно управлять языковыми различиями?

 Anderson Green06 нояб. 2012 г., 19:02
Смотрите здесь для предложений по автоматическому преобразованию Java в C #:stackoverflow.com/questions/443010/...

Ответы на вопрос(6)

Если у вас небольшое количество кода, то построчное преобразование, вероятно, будет наиболее эффективным.

Если у вас есть большой объем кода, я бы рассмотрел:

Ищете продукт, который делает разговор для вас.Написание скрипта (Ruby или Perl может быть хорошим кандидатом), чтобы сделать преобразование для вас - по крайней мере, монотонный материал! Это может быть простой поиск / замена различий в ключевых словах и переименование файлов. Дает вам больше времени / пальцев, чтобы сосредоточиться на более сложных вещах.

Я не уверен, что это действительно лучший способ конвертировать код построчно, особенно если препятствия становятся непреодолимыми. Конечно, Java-код дает вам руководство и базовую структуру, но я думаю, в конце самое важное, что библиотека предоставляет те же функциональные возможности, что и в Java.

Однажды я услышал что-то о .net версии Java. Если бы такой монстр был доступен, вы могли бы просто скомпилировать исходный код Java в промежуточные библиотеки .net?

 Bill K11 нояб. 2012 г., 00:41
Извини, могуне могу найти это сейчас. Я считаю, что это было дополнение к некоторому продукту (не свободный язык), но я должен был получить ссылки. Черт, это было 4 года назад, так или иначе - если это был продуктСкорее всего, сейчас нет! :(
 Anderson Green06 нояб. 2012 г., 19:03
Это действительно существует? Если так, то где вы узнали об этом?

Пара других вариантов стоит отметить:

J # это MicrosoftРеализация языка Java на .NET. Вы можете получить доступ к библиотекам Java (до версии 1.4 *, в любом случае). * на самом деле Java 1.1.4 для java.io/lang и 1.2 для java.util + имейте в виду, что J # конец жизни ~ 2015-2017 для J # 2.0 redist

Моно'с ИКВМ также запускает Java на CLR с доступом к другим программам .NET.

Microsoft Visual Studio 2005 поставляется сПомощник по преобразованию языка Java » которая автоматически конвертирует Java-программы в программы на C #.

 Cheeso31 мар. 2009 г., 22:14
Имейте в виду, что Java 1.4 уже 10 лет? По этой причине J # следует использовать только в исключительных случаях. Он был задуман как путь для существующих клиентов J ++ (помните?) К .NET. Не как общее решение Java-on- .NET.
Решение Вопроса

Вы делаете это единственно разумным способом, каким только можете ... Самым большим подспорьем будет этот документ от Dare Obasanjo, в котором перечислены различия между двумя языками:

http://www.25hoursaday.com/CsharpVsJava.html

Кстати, измените все методы getter и setter на свойства ... Нет необходимости использовать библиотеку C # точно так же, как библиотеку java, если вы не хотите идеальной совместимости интерфейса.

 Lee05 окт. 2008 г., 15:36
Спасибо за ссылку - этоотличный справочный материал для того, что яя делаю."
 NightOwl88804 февр. 2017 г., 05:10
изменить все методы получения и установки в свойства " - лучше подумай еще раз. Правильнее будет сказать, поменять на свойствакак указано в рекомендациях MSDN, Я просто должен был вернуть кучусвойства» вернуться к методам, которые были 1) установлены без get 2) недетерминированы 3) возвращены встроенные массивы ... что сделал кто-то другой. Слепое преобразование в свойства без учета того, что свойства должны действовать как поля, не является хорошей стратегией. Если сомневаешься, продолжай в том же духе.

Еще одна быстрая идея: вы можете использоватьIKVM преобразовать Java-jar в сборку .NET, а затем использоватьрефлектор- в сочетании сFileDisassembler Надстройка - чтобы разобрать его в проект Visual C #.

(Кстати, у меня нетЯ действительно использовал IKVM - кто-нибудь хочет поручиться, что этот процесс будет работать?)

 redcalx09 июл. 2009 г., 15:54
Можно использовать библиотеку IKVM, но если вы попытаетесь разобрать ее в Reflector, вы обнаружите, что часть MSIL, сгенерированного IKVM, не может быть разобрана на C #. Я предполагаю, что конструкции C # являются подмножеством всех конструкций, которые возможны с IL, или, по крайней мере, Reflector обрабатывает только подмножество, которое является типичным / ожидаемым.

Ваш ответ на вопрос