Aprendiendo .NET. Tutorial parte 8

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

Sube Tu Queja

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 <indentificadores>

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

• <public>
• <static>
• <void>
• <System>
• <string>
• …


Los <identificadores> 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 <identificador> de variable una palabra reservada del lenguaje <class>, 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 <identificador> 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. Oscar

    Acabo de enterarme de la pàgina por un programa de TV. Me gusta la programación en Visual Basic y hace días que no trabajo en ello.
    Gracias por compartir tus conocimientos, igualmente para todos aquellos que tienen este espíritu altruista.



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



  3. 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



  4. 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.



  5. 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.



  6. 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



  7. 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



  8. 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



  9. 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



  10. 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.

agregar comentario


Se permiten las etiquetas HTML <b>, <i> y <p>. 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