Algunos me han preguntado sobre diferencias entre el desarrollo en el iPhone (utilizando monotouch) y en Windows Phone 7. Para responder esta pregunta escribí esta comparación entre las dos plataformas para mostrar las ventajas y desventajas de cada una; el objetivo de este ejercicio será lanzar un evento desde un botón al hacer click y empezaremos con Windows Phone 7.

Lanzando un evento click en Windows Phone 7
En Windows Phone 7 es común utilizar Silverligth para aplicaciones que no son juegos, en esta tecnología los eventos son manejados de forma similar a Windows Forms, es decir, basta con arrastrar un botón desde el toolbox a la superficie de diseño y hacer doble click como muestra la siguiente imagen:

Lo anterior nos genera la definición del botón y el manejador del evento click; si además queremos cambiar la apariencia del botón para hacer las esquinas redondas basta con agregar un elemento border y ajustar las propiedades así:

Ahora intentaremos lo mismo en iPhone utilizando monotouch.

Lanzando un evento click en iPhone
En esta plataforma para arrastrar un botón desde el toolbox tenemos que abrir el Interface Builder haciendo doble click en el archivo MainWindow.xib y luego hacer click en el objeto Window como muestra la siguiente imagen:

El equivalente al toolbox es la ventana Library (Tools>Library), desde allí tenemos que navegar que navegar a la sección objects>input & values y arrastrar un round rect button:

El paso anterior crea un objeto visual en la superficie de la ventana, sin embargo no se crea en ningún otro sitio, por lo cual no es accesible desde el código hasta este momento; para que sea accesible tenemos dos caminos agregar un outlet (estilo monotouch) o agregar un action (estilo Cocoa) a la función delegado que maneja el ciclo principal de la aplicación (conocido como el AppDelegate).

Para agregar un outlet desde el Library debemos nevegar a clases>app delegate>outlets y hacer click en el botón + :

Después de lo anterior debemos relacionar manualmente el outlet con el botón como muestra la siguiente imagen:

Con el paso anterior monotouch nos crea en el archivo MainWindow.xib.designer.cs una propiedad dentro de la clase parcial AppDelegate, la cual utiliza el outlet para acceder al botón.

Con la definición de la propiedad local creada por monotouch podemos acceder dentro de la aplicación al botón para por ejemplo cambiar su texto a través de un delegate como se muestra en la siguiente imagen:

Para hacer lo mismo al estilo Cocoa debemos seguir los mismos pasos pero en lugar de agregar un outlet, agregamos un action, seleccionamos el botón, relacionamos su evento TouchDown con el AppDelegate y luego con el action directamente:

La siguiente imagen muestra el resultado del ejercicio en ambas plataformas:

Finalmente quisiera compartir una imagen de los dos simuladores:

Conclusiones
Como el objetivo de este blog es responder la pregunta sobre diferencias en desarrollo, quise responderla con este ejemplo y les dejo a ustedes que hagan sus propias conclusiones en cuanto a diferentes aspectos, por ejemplo productividad.

Saludos,