2008-10-03 28 views
5

Estoy portando una biblioteca Java a C#. Estoy usando Visual Studio 2008, así que no tengo el programa de Asistente de conversión de lenguaje Microsoft Java (JLCA).¿Cómo convierto el código Java en código C#?

Mi enfoque es crear una nueva solución con una estructura de proyecto similar a la biblioteca Java, y luego copiar el código java en un archivo C# y convertirlo a C# línea por línea válida. Considerando que encuentro Java fácil de leer, las diferencias sutiles en los dos idiomas me han sorprendido.

Algunas cosas son fáciles de portar (espacios de nombres, herencia, etc.) pero algunas cosas han sido inesperadamente diferentes, como la visibilidad de miembros privados en clases anidadas, la anulación de métodos virtuales y el comportamiento de los tipos integrados. No entiendo completamente estas cosas y estoy seguro de que hay muchas otras diferencias que aún no he visto.

Tengo un largo camino por recorrer en este proyecto. ¿Qué reglas básicas puedo aplicar durante esta conversión para gestionar las diferencias de idioma correctamente?

+0

Consulte aquí para obtener sugerencias sobre automatizado # conversión de Java a C: http: // stackoverflow .com/questions/443010/where-can-i-find-a-java-to-c-sharp-converter –

Respuesta

3

Su hacerlo de la única manera sensata puede ... la mayor ayuda será este documento desde Dare Obasanjo que enumera las diferencias entre los dos idiomas:

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

Por cierto, cambiar todos captador y establecer métodos en las propiedades ... No es necesario que la biblioteca C# funcione de la misma manera que la biblioteca java, a menos que busque una compatibilidad de interfaz perfecta.

+0

Gracias por el enlace, es un excelente material de referencia para lo que estoy haciendo. – Lee

+0

"cambiar todos los métodos getter y setter en propiedades" - mejor piense otra vez en eso. Sería más correcto decir, cambiar a propiedades [como se especifica en las pautas de MSDN] (https://msdn.microsoft.com/en-us/library/ms229054 (v = vs.100) .aspx). Solo tuve que revertir un grupo de "propiedades" a métodos que se 1) establecieron sin obtener 2) no deterministas 3) matrices construidas devueltas ... que alguien más hizo. La conversión ciega a propiedades sin considerar que las propiedades se supone que actúen como campos no es una buena estrategia. Si tiene dudas, consérvelo como un método. – NightOwl888

0

No estoy seguro de si realmente es la mejor manera de convertir el código línea por línea, especialmente si los obstáculos se vuelven abrumadores. Por supuesto, el código de Java le da una pauta y la estructura básica, pero creo que al final lo más importante es que la biblioteca proporciona la misma funcionalidad que en Java.

0

Escuché algo el otro día acerca de una versión .NET de Java. Si ese monstruo estuviera disponible, ¿podría compilar el origen de Java en las bibliotecas intermedias .net?

+0

¿Realmente existe? Si es así, ¿dónde se enteró? –

+0

Lo sentimos, no puedo encontrarlo ahora. Creo que fue un complemento para algún producto (no es un lenguaje libre), pero debería haber captado referencias. De todos modos, hace 4 años, de todos modos, si era un producto, ¡casi seguro que ya no está! :( –

1

Si tiene una pequeña cantidad de código, entonces una conversión línea por línea es probablemente la más eficiente.

Si usted tiene una gran cantidad de código que yo consideraría:

  1. Buscando un producto que hace la conversación para usted.
  2. Escribir un guión (Ruby o Perl podría ser un buen candidato) para hacer la conversión por usted, ¡al menos las cosas monótonas! Podría ser una simple búsqueda/reemplazo para las diferencias de palabras clave y el cambio de nombre de los archivos. Te da más tiempo/dedos para concentrarte en las cosas más difíciles.
3

par de otras opciones dignas de mención:

  • J# es el lenguaje Java aplicación de Microsoft en .NET. Puede acceder a las bibliotecas de Java (hasta la versión 1.4 *, de todos modos). * en realidad Java 1.1.4 para java.io/lang, y 1.2 para java.util + tenga en cuenta que J # final de la vida es ~ 2015-2017 para J # 2.0 Redist

  • Mono's IKVM también se ejecuta Java en el CLR, con acceso a otros programas .NET .

  • Microsoft Visual Studio 2005 viene con una "conversión del lenguaje Java asistente" que convierte Java programas a los programas de C# automáticamente.

+0

Tenga en cuenta que Java 1.4 tiene algo así como 10 años de antigüedad. Por esa razón, J # debe usarse solo en casos excepcionales. Fue pensado como una ruta para clientes existentes de J ++ (¿recuerdan?) A .NET. una solución Java-on-.NET general. – Cheeso

1

Una idea más rápido y sucio-: usted podría utilizar IKVM para convertir el tarro de Java a un ensamblado de .NET, a continuación, utilizar Reflector --Orden combinada con la FileDisassembler Add-en desmonte en una Proyecto Visual C#.

(Por cierto, no he utilizado realmente IKVM - A alguien le importa a dar fe de que este proceso podría funcionar?)

+2

La biblioteca IKVM se puede usar, pero si intenta desmontarla en Reflector, encontrará que algunos de los MSIL generados por IKVM no se pueden disolver en C#. Supongo que las construcciones C# son un subconjunto. de todas las construcciones que son posibles con IL, o al menos Reflector solo maneja un subconjunto que es típico/esperado. – redcalx