Aprendiendo .NET. Tutorial parte 8

Escrito por George POLIOVEI el Martes 07 de Abril de 2009 a las 09:38hs

Bienvenidos a esta nueva entrega de Aprendiendo .NET

En esta oportunidad vamos a estudiar los siguientes temas

? Palabras reservadas del lenguaje C#
? El M?todo Main() en profundidad


PALABRAS RESERVADAS DEL LENGUAJE

Las aplicaciones que hemos estado estudiando en las entregas anteriores, contienen muchas palabras, de las cuales algunas de ellas son reconocidas por el lenguaje y marcadas como reservadas, y aquellas que no lo son, se les denominan como por ejemplo ?

Una palabra reservada no la podemos utilizar como , ya que al ser reservada tiene un significado especial para el lenguaje, ejemplos de estas palabras que hemos estado utilizando son:

?
?
?
?
?
? ?


Los simplemente son nombres por medio de los cuales referenciamos alguna parte de nuestro c?digo, como por ejemplo una clase, o una variable ?

Tambi?n los m?todos necesitan ser referenciados por alguna palabra para poder usarlos, por ejemplo hemos estado usando el m?todo de entrada a la aplicaci?n al cual lo hemos denominada Main.

public static void Main()

La l?nea anterior es una declaraci?n de m?todo y contiene tres palabras reservadas del lenguaje (public, static y void) y una que hace de identificador de dicho m?todo (Main)

public class HelloGuruProgrammer

En esta otra vemos una declaraci?n de clase, la cual contiene dos palabras reservadas (public y class) y una que hace de identificador de la clase (HelloGuruProgrammer)

La siguiente lista muestra las palabras que C# mantiene como reservadas, puede que falten algunas pero est?n casi todas:

Esta lista la hice en el note padd ++ para que aprecien como todas ellas toman color, esto significa que todas ellas son reservadas por el lenguaje en el que estamos programando, en nuestro caso C#.

Ok, si queremos usar una de estas palabras como identificador entonces lo que obtendremos ser? un error de compilaci?n.

Veamos un ejemplo :


Esta aplicaci?n nos dar? error durante la compilaci?n, ya que estamos tratando de usar como de variable una palabra reservada del lenguaje >, ahora bien el note padd nos esta alertando de esta situaci?n, pero imaginen si est?n trabajando con un editor de texto que no tenga esta diferenciaci?n como por ejemplo el blok de notas de Windows

Veamos ahora el error de compilaci?n :


Bueno la imagen lo dice todo, observen la cantidad de errores generados por haber usado una palabra reservada como de una variable, concretamente la flecha roja muestra donde se produjo el error (linea 5 , columna 13), si miramos el c?digo fuente en dicho lugar se encuentra el identificador no v?lido usado (int class?), tambi?n el compilador muestra a que se debi? el error (Identifier expected), dice que se esperaba un identificador.

Una cosa para complementar, no es usual que los programadores utilicen como <identificadores> palabras reservadas, pero si necesitan hacerlo hay un modo que evita el error de compilaci?n, repito solo se debe hacer en los casos que se crean sumamente necesario.

Para que se pueda usar una palabra reservada del lenguaje como identificador simplemente se le debe interponer el s?mbolo @

int @class = 5;

Pero como dije antes nos es una buena pr?ctica

Ve?moslo en la hoja de c?digo

La siguiente imagen muestra el c?digo modificado donde le interpuse el s?mbolo de @ a la palabra reservada class


Como pueden apreciar la palabra se ha des coloreado, esto significa que ya no estamos usando una palabra reservada, aunque en realidad casi
Luego desde la consola lo compilo y haber que sucede

Observen que ya no hubo error de compilaci?n de lo contrario habr?a aparecido donde se?ala la flecha roja, esto significa que el MSIL ha sido creado correctamente.

EL METODO Main()

Si recuerdan, en las entregas anteriores hab?amos dicho que todas nuestras aplicaciones deber?an implementar el m?todo Main(), ya que ?ste registra el punto de entrada a nuestra aplicaci?n, ahora bien, tambi?n dijimos que dicho m?todo deber?a ser est?tico (static) para que solo una copia del m?todo viviese en memoria y p?blico (public) para que pueda ser accedido a ?l desde el exterior de la clase e inclusive de la aplicaci?n.

En esta entrega vamos a ahondar un poco m?s en dicho m?todo ya que considero que, para las siguientes entregas es necesario que se de por entendido y sabido dicho tema

Hasta ahora, hemos estado usando una sola clase como practica para nuestras aplicaciones, pero en realidad a medida que crecen los aplicativos no es una buena pr?ctica mantener todo el c?digo en una sola clase sino en varias, esto ayuda a ordenar y hacer mas entendible nuestro c?digo, tambi?n permite usar el concepto de reutilizaci?n de c?digo.

Para el caso donde nuestro aplicativo posea m?s de una clase, inclusive m?s de un archivo de c?digo fuente es importante recordar que al menos una de las clases que conforman la aplicaci?n, debe implementar el m?todo Main(), no pueden haber mas de una clase que implemente dicho m?todo, SOLO DEBE SER IMPLEMENTADO POR UNA , de lo contrario se producir? un error de compilaci?n.

Veamos un ejemplo

El siguiente aplicativo lo llamar? ejemplo2.cs, y estar? conformado por 2 clases, ambas implementaran el m?todo Main()


Esto producir? un error de compilaci?n ya que nuestra aplicaci?n implementa el m?todo Main(), en ambas clases y como dijimos solamente una de las clases que conforman el aplicativo debe implementarlo, pero veamos el error para que quede mas claro

Como era de esperarse durante el proceso de compilaci?n surgi? el error, y adem?s el noble compilador nos est? indicando cual fue

?Has more than entry point defined:?

Tiene m?s de un punto de entrada definido

Obviamente con eliminar uno de los m?todos definidos se soluciona el problema pero vamos a eliminar ambos m?todos para ver que sucede


Esta aplicaci?n implementa 2 clases (Class1 y Class2) ambas clases definen un m?todo que hace algo, no importa que, es s?lo para ver el error que se producir? a causa de que ninguna de las clases que conforman la aplicaci?n definen o implementan el m?todo Main()

Aqu? vemos el resultado al momento de compilarlo


Observen como el compilador nos est? alertando de que el MSIL no se pudo crear dado que la aplicaci?n resultante no posee o implementa el M?todo Main()

?ejemplo2.exe ?does not contain a static ?Main? method for an entry point?

?el programa ejemplo2.exe no contiene el m?todo est?tico Main para un punto de entrada?

Ahora voy a modificar el aplicativo para que no surjan errores de compilaci?n, y eso lo hacemos asignando a al programa el m?todo Main() en una de las dos clases, puede ser en Class1 como en Class2 yo lo voy a definir en la clase Class1


Muy bien, aqu? he agregado el punto de entrada a la aplicaci?n, ahora el aplicativo estar? conformado por dos clases en donde Class1 implementa dos m?todos y uno de ellos es el Main().

Veamos ahora el resultado de la compilaci?n



Perfecto ahora si todo esta en orden.-

Para terminar con el tema vamos a entender que en especial el M?todo Main(), se compota como cualquier otro m?todo, por lo tanto tambi?n es posible hacer que dicho m?todo devuelva un valor una vez finalizada la aplicaci?n

Hasta ahora hemos estado utilizando nuestro m?todo como tipo void o sea que una vez finalizadas las acciones del mismo no devolver? nada.

Veamos las construcciones que soporta el m?todo Main() adem?s de las que hemos estado usando


1. Esta forma es la que hemos estado usando, o sea que no recibe par?metros como argumento de m?todo

2. Esta forma tampoco devuelve nada al que hace la llamada, pero es capaz de guardar valores pasados como argumentos en una matriz de cadena de caracteres, cada valor que le pasemos al m?todo ser? guardado en la matriz de argumento que define como par?metro el m?todo Main().

Hasta ahora hemos estado ejecutando las aplicaciones que creamos desde Windows haciendo doble clic sobre ellas, pero perfectamente lo podr?amos hacer desde la misma consola, ejecutar nuestro programa resultante de la compilaci?n directamente desde la consola permite adem?s pasar par?metros al m?todo Main(), un ejemplo de ellos son los comandos de DOS como los que vimos antes, tomemos como ejemplo el comando CD este comando acepta par?metros y estos determinar la posici?n a la que queremos movernos dentro del disco, por ejemplo

El comando cd no es mas que un programa (cd.exe) que permite movernos a trav?s del disco y acepta como par?metros la ubicaci?n donde queremos ir, y recordemos que si en la consola digitamos un nombre de archivo, el SO. Verificar? su extensi?n y si es EXE o BAT o COM entonces ejecutara el contenido del mismo, por lo tanto al adoptar nuestros programas resultantes de una compilaci?n la extensi?n EXE tambi?n se ejecutar?n si ?nicamente digitamos su nombre

Como ejemplo voy a modificar el aplicativo que venimos trabajando (ejemplo2) para que acepte par?metros y lo muestre en pantalla. No se preocupen si no entienden las matrices ya que las daremos mas adelante, ahora es importante ver como se comporta el M?todo Main() que es el que estamos estudiando.


Aqu? esta el c?digo modificado, ahora lo voy a compilar el archivo ejemplo2.cs para obtener el archivo ejecutable (ejemplo2.exe) que recuerden que es un MSIL

Una vez compilado, como dijimos antes con solo escribir su nombre bastar? para que entre en ejecuci?n y como ahora acepta par?metros le voy a pasar mi nombre y veamos que sucede


Creo que la imagen lo dice todo, el m?todo WriteLine(), definido en la aplicaci?n muestra en pantalla la palabra ?Hola? y concatena dicha palabra con el par?metro pasado desde la consola, en este caso mi nombre

3. la tercera forma del m?todo Main(), devuelve un entero cuando el programa llega a su fin, por ejemplo supongamos que una aplicaci?n externa llama a la nuestra para que trabaje en conjunto, ser?a bueno entonces que nuestra aplicaci?n informara que todo el proceso concerniente a C# tuvo ?xito o no, eso lo podemos hacer por ejemplo devolviendo un 0 (sino hubieron errores o un n?mero distinto a 0 si lo hubieron).

Ve?moslo con un ejemplo, vamos a modificar el aplicativo para que devuelva 0 si no existieron errores



Aqu? hay un par de l?neas nuevas el try y catch, pero no se preocupen ahora, mas adelante lo veremos en detalle, simplemente como adelanto les dir? que todo lo que encerremos entre las llaves del try ser? analizado y si surge alg?n error entonces el flujo saltar? directo al catch para tratar el error, para nuestro ejemplo hacer que el m?todo Main() retorne un valor distinto de 0.
Ahora, si dentro del try no se producen errores entonces el catch nunca ser? ejecutado por lo tanto antes de finalizar el programa el m?todo Main() retornar? el valor 0, de nuevo no se preocupen por el try y el catch mas adelante lo veremos en detalle, este ejemplo es para estudiar el m?todo Main()

Muy bien ahora el siguiente paso es compilar el c?digo fuente y ejecutarlo para ver que sucede


Excelente, por lo tanto si la aplicaci?n que llamo a la nuestra recibe de nuestro m?todo Main() el valor 0 entonces podr? continuar con otras tareas sabiendo que no se produjeron errores en la nuestra

4. Y por ?ltimo la cuarta forma del m?todo Main(), puede adem?s de hacer todo lo anterior, recibir valores como argumento de par?metros, de la misma forma que lo hicimos en la 2da construcci?n
Ve?moslo con un ejemplo

Lo ?nico que voy a hacer es modificar el c?digo anterior para que la aplicaci?n acepte par?metros y mostrar en pantalla un texto predefinido concaten?ndolo al par?metro pasado desde la consola al m?todo Main()


Ahora compilo el c?digo fuente y ejecuto el archivo resultante pas?ndole como par?metro la palabra ?Hola?


Perfecto no se produjeron errores, ahora lo que vamos a hacer es provocar un error para que el m?todo devuelva un valor distinto de 0, y eso lo podemos lograr de la siguiente forma
Como en un punto de nuestra aplicaci?n existe una sentencia que trabaja con los argumentos pasados como par?metro al el m?todo Main(), ?ste espera al menos uno de ellos, o sea que si no le pasamos nada, entonces se producir? un error.
En cambio si en ninguna parte de nuestro c?digo utiliz?ramos los valores pasados al M?todo Main(), aunque no le pasemos nada no se producir?n errores
Bueno aqu? se ve el error y de acuerdo al c?digo fuente sabemos que el m?todo Main() no devolvi? el valor 0, sino el 1.


Como pueden ver al producirse un error en el try se ejecut? directamente lo codificado entre las llaves del catch donde claramente se nota que luego de mostrar en pantalla una advertencia termina retornando el valor 1

Muy bien por ?ltimo, es bueno saber que cuando de define el M?todo Main() como void una vez terminada la ejecuci?n del mismo siempre retorna el valor 0, indicando el fin de la aplicaci?n

Espero que les haya servido la entrega de hoy en la pr?xima veremos todo lo relacionado a los Comentarios y como generar XML a partir de ellos es un tema realmente interesante.

Nota:
Si el material que estamos publicando son de ayuda para ustedes no olviden hacer comentarios en el blog, no importa de que tipo constructivos o no, de aliento o de cualquier ?ndole. Para nosotros es muy importante sentir su presencia.

George POLIOVEI


comentarios



  1. Buen día, antes que nada una sincera felicitación, ya que hasta este tema 8 el curso ha estado llevado de una forma muy clara y fácil de entender, solo espero q los que falten por concluir lleven la misma metodoligía, y como mencionaste....se toma un gusto por este lenguaje que se toma la decisión de meterse a aquellos que tengan que ver con .NET. Por útimo me gustaria saber si tienes pensado incorporar uno de ASP.NET y de JAVA que en verdad si pudiera ser el caso me gustaria que fuesen desde cero también; claro con la claridad como estas llevando este, espero no sea mucho pedir ya que estoy interesado en esta parte, hasta pronto y nuevamente una felicitación de mi parte con afecto, att tu amigo Oscar.



  2. Muy apreciado Oscar, gracias por el aliento que nos dejas, sobre ASP.NET seguro que lo daremos desde 0, es lo que tenemos pensado, lo unico que a este paso creo nos llevará mas de 200 entregas, espero poder cumplir, sobre Java, permiteme decirte que si te muestro 2 bloques de código uno en Java y otro en C# seguranmente no destingas a cual pertenece cada uno, ademas ambos trabajan sobre una maquina virtual, pero creo que para que esto quede bien de verdad quizas empecemos a hablar un poco de C y C++ no se, creo que es mas productivo que Java.
    Gracias por escribirnos

    Cordialidades
    George



  3. muchas gracias por escribir esto
    de verdad que hace tiempo queria aprender a programar en C# pero ahy muchos que enseñan partiendo de la base que sabes algo de este lenguaje
    yo soy programador titulado y no me enseñaron este interesante lenguaje la base de C++ la tengo pero quiero perfeccionarla

    fuerza y sientete orgulloso de tu esfuerzo y dedicacion



  4. Hola, primero que nada comentarle que el curso esta muy bueno, y lo estoy siguiendo muy de cerca, yo ya manejo .NET pero el curso que hice me dejo muchas dudas y la verdad nunca habia visto cosas como crear un programa con un block de notas como lo haces tu en .NET, mira no se si es molestia pero estoy diseñando una pagina donde quiero mostrar el resultado de una serie de datos en un label pero me gustaria que me salieran con vuelta de carro, o sea yo recibo 6 datos por ej nombre, apellido, edad y me gustaria mostrarlos en un label pero cada dato en un renglon, he intentado pero no me sale lo hago por ejemplo con lblMensaje.Text = dato1 +
    + dato2 +
    .....
    por alguna razon no sale como quiero, si sale pero todo en una misma linea, bueno perdon por el pedido un abrazo, espero me puedan ayudar



  5. Hola, mira se que ya hablastes del tema pero en un comentario de una nota anterior, la pregunta es podrias explicar como los haces con el curso pero referente a los sistemas numericos ? necesito para la clase de programacion realizar conversiones a binario y hexadecimal y todo eso, bueno espero me puedan ayudar

    besos



  6. Hola que tal? Recién hoy pude engancharme con el curso. Estuve leyendo y se me ocurrio, ya que en estecapítulo hablaste de algunos errores específicos del main. Si podas explicarme o ampliarme este error que me sale cuando intento compilar el código de la parte anterior.
    Nombredelaclase.cs: error CS0116: Un espacio de nombres no contiene directamente miembros como campos o métodos.
    Muchas gracias y felicitaciones, hasta ahora todo genial, salvo ese pequeñito error.



  7. Hola! veo que no han comentado desde Junio :D ...

    Nuevamente mis felicitaciones a quienes están realizando tan majestuosa labor de dar conceptos de manera clara y sencilla.. estoy esperando ansioso la edición 9 de este curso.. así que adelante y no se demoren. :D

    Un abrazo.



  8. Que tal buenos amigos, en primer lugar mil disculpas por no haber posteado nada mas, el tema pasa porque nos hemos embarcado en un proyecto realmente grande que nos ocupa mucho tiempo, pero esparamos seguir discutiendo pronto, muchas gracias por los comentarios y al admin del sitio que mantiene nuestro post, en la edicion 9 veremos esos problemas que han comentado y seguro ya han resuelto, a su vez les comento que se nos ha unido un amigo muy especial que esta deseoso de postear sus conocimientos

    Muchas cordialidades

    GRP



  9. Hola george, por favor no dejes de escribir estos articulos tan interesantes, ya hace tiempo que no lo haces.
    Saludos

agregar comentario


Se permiten las etiquetas HTML , y

. Si ingresa alguna direcci?n web o direcci?n de email ser?n convertidos en enlaces autom?ticamente.





publicidad

API DE FACEBOOK
GOOGLE CALENDAR API
GOOGLE MAPS API