Sunteți pe pagina 1din 31

Un controlador de eventos es una subrutina que ejecuta el cdigo para un evento determinado.

ASP.NET - controladores de eventos


Mira el siguiente cdigo: <% lbl1.Text="The date and time is " & now() %> <html> <body> <form runat="server"> <h3><asp:label id="lbl1" runat="server" /></h3> </form> </body> </html> Cundo el cdigo anterior se ejecuta? La respuesta es: "No lo s ..."

El evento Page_Load
El evento Page_Load es uno de muchos eventos que ASP.NET entiende. El evento Page_Load se activa cuando se carga una pgina y ASP.NET automticamente llamar a la subrutina Page_Load, y ejecutar el cdigo en su interior:

Ejemplo
<script runat="server"> Sub Page_Load lbl1.Text="The date and time is " & now() End Sub </script> <html> <body> <form runat="server"> <h3><asp:label id="lbl1" runat="server" /></h3> </form>

</body> </html> Ver ejemplo Nota: El evento Page_Load no contiene referencias a objetos o argumentos de evento!

La propiedad Page.IsPostBack
La subrutina Page_Load se ejecuta cada vez que se carga la pgina. Si desea ejecutar el cdigo en la subrutina Page_Load slo la primera vez que se carga la pgina, puede utilizar la propiedad Page.IsPostBack. Si la propiedad Page.IsPostBack es falsa, la pgina se carga por primera vez, si bien es cierto, la pgina se devuelva al servidor (es decir, de un clic de botn en un formulario):

Ejemplo
<script runat="server"> Sub Page_Load if Not Page.IsPostBack then lbl1.Text="The date and time is " & now() end if End Sub Sub submit(s As Object, e As EventArgs) lbl2.Text="Hello World!" End Sub </script> <html> <body> <form runat="server"> <h3><asp:label id="lbl1" runat="server" /></h3> <h3><asp:label id="lbl2" runat="server" /></h3> <asp:button text="Submit" onclick="submit" runat="server" /> </form> </body> </html> Ver ejemplo En el ejemplo de arriba va a escribir la "La fecha y hora ...." mensaje slo la primera vez que se carga la pgina. Cuando un usuario hace clic en el botn Enviar, la subrutina submit

a escribir "Hola Mundo!" a la segunda etiqueta, pero la fecha y la hora en la primera etiqueta no cambiar.

Crear un ArrayList
El objeto ArrayList es una coleccin de artculos que contengan un valor de datos nico. Los elementos se agregan a la ArrayList con el mtodo add (). El cdigo siguiente crea un nuevo objeto ArrayList mycountries nombre y cuatro elementos agregados son:
<script runat="server"> Sub Page_Load if Not Page.IsPostBack then dim mycountries=New ArrayList mycountries.Add("Norway") mycountries.Add("Sweden") mycountries.Add("France") mycountries.Add("Italy") end if end sub </script>

De forma predeterminada, un objeto ArrayList contiene 16 entradas. Un ArrayList puede ser de un tamao hasta su tamao final con el mtodo TrimToSize ():
<script runat="server"> Sub Page_Load if Not Page.IsPostBack then dim mycountries=New ArrayList mycountries.Add("Norway") mycountries.Add("Sweden") mycountries.Add("France") mycountries.Add("Italy") mycountries.TrimToSize() end if

end sub </script>

Un ArrayList tambin se pueden ordenar alfabticamente o numricamente con el mtodo Sort ():
<script runat="server"> Sub Page_Load if Not Page.IsPostBack then dim mycountries=New ArrayList mycountries.Add("Norway") mycountries.Add("Sweden") mycountries.Add("France") mycountries.Add("Italy") mycountries.TrimToSize() mycountries.Sort() end if end sub </script>

Para ordenar en orden inverso, aplicar el mtodo Reverse () despus del mtodo Sort ():
<script runat="server"> Sub Page_Load if Not Page.IsPostBack then dim mycountries=New ArrayList mycountries.Add("Norway") mycountries.Add("Sweden") mycountries.Add("France") mycountries.Add("Italy") mycountries.TrimToSize() mycountries.Sort() mycountries.Reverse() end if end sub </script>

Enlace de datos a un objeto ArrayList

Un objeto ArrayList puede generar automticamente el texto y los valores de los siguientes controles:

asp: RadioButtonList asp: CheckBoxList asp: DropDownList asp: ListBox

Para enlazar datos a un control RadioButtonList, en primer lugar crear un control RadioButtonList (sin asp: ListItem elementos) en una pgina aspx.:
<html> <body> <form runat="server"> <asp:RadioButtonList id="rb" runat="server" /> </form> </body> </html>

A continuacin, aadir el script que genera la lista y se une a los valores de la lista para el control RadioButtonList:

Ejemplo
<script runat="server"> Sub Page_Load if Not Page.IsPostBack then dim mycountries=New ArrayList mycountries.Add("Norway") mycountries.Add("Sweden") mycountries.Add("France") mycountries.Add("Italy") mycountries.TrimToSize() mycountries.Sort() rb.DataSource=mycountries rb.DataBind() end if end sub </script> <html>

<body> <form runat="server"> <asp:RadioButtonList id="rb" runat="server" /> </form> </body> </html>

Ver ejemplo

La propiedad DataSource del control RadioButtonList se establece en el ArrayList y define el origen de datos del control RadioButtonList. El mtodo DataBind () del control RadioButtonList une el origen de datos con el control RadioButtonList. Nota: Los valores de datos se utilizar para las propiedades Text y Value del control. Para agregar valores que son diferentes de los de texto, utilizar el objeto Hashtable o el objeto SortedList.

Crear una Hashtable


El objeto Hashtable contiene elementos de pares clave / valor. Las teclas se utilizan como ndices, y bsquedas muy rpidas se pueden establecer valores de referencia mediante la bsqueda a travs de sus teclas. Los elementos se agregan a la tabla hash con el mtodo add (). El siguiente cdigo crea una Hashtable mycountries con nombre y cuatro elementos se aaden: <script runat="server"> Sub Page_Load if Not Page.IsPostBack then dim mycountries=New Hashtable mycountries.Add("N","Norway") mycountries.Add("S","Sweden") mycountries.Add("F","France") mycountries.Add("I","Italy") end if end sub </script>

Enlace de datos
Un objeto Hashtable puede generar automticamente el texto y los valores de los siguientes controles:

asp: RadioButtonList asp: CheckBoxList asp: DropDownList asp: ListBox

Para enlazar datos a un control RadioButtonList, en primer lugar crear un control RadioButtonList (sin asp: ListItem elementos) en una pgina aspx.: <html> <body> <form runat="server"> <asp:RadioButtonList id="rb" runat="server" AutoPostBack="True" /> </form> </body> </html> A continuacin, aadir el script que genera la lista: <script runat="server"> sub Page_Load if Not Page.IsPostBack then dim mycountries=New Hashtable mycountries.Add("N","Norway") mycountries.Add("S","Sweden") mycountries.Add("F","France") mycountries.Add("I","Italy") rb.DataSource=mycountries rb.DataValueField="Key" rb.DataTextField="Value" rb.DataBind() end if end sub </script> <html> <body>

<form runat="server"> <asp:RadioButtonList id="rb" runat="server" AutoPostBack="True" /> </form> </body> </html> A continuacin aadimos una subrutina que se ejecuta cuando el usuario hace clic en un elemento en el control RadioButtonList. Cuando un botn es pulsado, el texto aparecer en una etiqueta:

Ejemplo
<script runat="server"> sub Page_Load if Not Page.IsPostBack then dim mycountries=New Hashtable mycountries.Add("N","Norway") mycountries.Add("S","Sweden") mycountries.Add("F","France") mycountries.Add("I","Italy") rb.DataSource=mycountries rb.DataValueField="Key" rb.DataTextField="Value" rb.DataBind() end if end sub sub displayMessage(s as Object,e As EventArgs) lbl1.text="Your favorite country is: " & rb.SelectedItem.Text end sub </script> <html> <body> <form runat="server"> <asp:RadioButtonList id="rb" runat="server" AutoPostBack="True" onSelectedIndexChanged="displayMessage" /> <p><asp:label id="lbl1" runat="server" /></p> </form> </body> </html> Ver ejemplo

Nota: No se puede elegir el orden de los elementos agregados a la Hashtable. Para ordenar los elementos alfabticamente o numricamente, utilice el objeto SortedList.

El objeto SortedList
El objeto SortedList contiene elementos de pares clave / valor. Un objeto SortedList automticamente ordenar los elementos en orden alfabtico o numrico. Los elementos se agregan a la coleccin SortedList con el mtodo add (). Una SortedList puede ser de un tamao hasta su tamao final con el mtodo TrimToSize (). El siguiente cdigo crea una mycountries SortedList nombre y se aaden cuatro elementos: <script runat="server"> sub Page_Load if Not Page.IsPostBack then dim mycountries=New SortedList mycountries.Add("N","Norway") mycountries.Add("S","Sweden") mycountries.Add("F","France") mycountries.Add("I","Italy") end if end sub </script>

Enlace de datos
Un objeto SortedList puede generar automticamente el texto y los valores de los siguientes controles:

asp: RadioButtonList asp: CheckBoxList asp: DropDownList asp: ListBox

Para enlazar datos a un control RadioButtonList, en primer lugar crear un control RadioButtonList (sin asp: ListItem elementos) en una pgina aspx.: <html> <body>

<form runat="server"> <asp:RadioButtonList id="rb" runat="server" AutoPostBack="True" /> </form> </body> </html> A continuacin, aadir el script que genera la lista: <script runat="server"> sub Page_Load if Not Page.IsPostBack then dim mycountries=New SortedList mycountries.Add("N","Norway") mycountries.Add("S","Sweden") mycountries.Add("F","France") mycountries.Add("I","Italy") rb.DataSource=mycountries rb.DataValueField="Key" rb.DataTextField="Value" rb.DataBind() end if end sub </script> <html> <body> <form runat="server"> <asp:RadioButtonList id="rb" runat="server" AutoPostBack="True" /> </form> </body> </html> A continuacin aadimos una subrutina que se ejecuta cuando el usuario hace clic en un elemento en el control RadioButtonList. Cuando un botn es pulsado, el texto aparecer en una etiqueta:

Ejemplo
<script runat="server"> sub Page_Load if Not Page.IsPostBack then dim mycountries=New SortedList

mycountries.Add("N","Norway") mycountries.Add("S","Sweden") mycountries.Add("F","France") mycountries.Add("I","Italy") rb.DataSource=mycountries rb.DataValueField="Key" rb.DataTextField="Value" rb.DataBind() end if end sub sub displayMessage(s as Object,e As EventArgs) lbl1.text="Your favorite country is: " & rb.SelectedItem.Text end sub </script> <html> <body> <form runat="server"> <asp:RadioButtonList id="rb" runat="server" AutoPostBack="True" onSelectedIndexChanged="displayMessage" /> <p><asp:label id="lbl1" runat="server" /></p> </form> </body> </html> Ver ejemplo

Enlazar un DataSet a un control DataList


El control DataList es, como el control Repeater, que se utiliza para mostrar una lista de elementos repetidos que se enlazan al control. Sin embargo, el control DataList agrega una tabla en torno a los elementos de datos por defecto. El control DataList puede ser enlazado a una tabla de base de datos, un archivo XML, u otra lista de elementos. Aqu vamos a mostrar cmo enlazar un archivo XML en un control DataList. Vamos a utilizar el archivo XML siguiente en nuestros ejemplos ("cdcatalog.xml"):
<?xml version="1.0" encoding="ISO-8859-1"?> <catalog>

<cd> <title>Empire Burlesque</title> <artist>Bob Dylan</artist> <country>USA</country> <company>Columbia</company> <price>10.90</price> <year>1985</year> </cd> <cd> <title>Hide your heart</title> <artist>Bonnie Tyler</artist> <country>UK</country> <company>CBS Records</company> <price>9.90</price> <year>1988</year> </cd> <cd> <title>Greatest Hits</title> <artist>Dolly Parton</artist> <country>USA</country> <company>RCA</company> <price>9.90</price> <year>1982</year> </cd> <cd> <title>Still got the blues</title> <artist>Gary Moore</artist> <country>UK</country> <company>Virgin records</company> <price>10.20</price> <year>1990</year> </cd> <cd> <title>Eros</title> <artist>Eros Ramazzotti</artist> <country>EU</country> <company>BMG</company> <price>9.90</price> <year>1997</year> </cd> </catalog>

Echa un vistazo al archivo XML: cdcatalog.xml En primer lugar, importa el "System.Data" espacio de nombres. Necesitamos este espacio de nombres para trabajar con objetos DataSet. Incluya la siguiente directiva en la parte superior de una pgina aspx.:
<%@ Import Namespace="System.Data" %>

A continuacin, cree un conjunto de datos para el archivo XML y cargar el archivo XML en el conjunto de datos cuando la pgina se carga por primera vez:
<script runat="server"> sub Page_Load if Not Page.IsPostBack then dim mycdcatalog=New DataSet mycdcatalog.ReadXml(MapPath("cdcatalog.xml")) end if end sub

Luego creamos un DataList en una pgina. Aspx. El contenido del elemento <HeaderTemplate> se representan primero y slo una vez en la salida, entonces el contenido del elemento <ItemTemplate> se repiten para cada "registro" en el conjunto de datos y, por ltimo, el contenido del elemento <FooterTemplate> son rendido una vez dentro de la salida:
<html> <body> <form runat="server"> <asp:DataList id="cdcatalog" runat="server"> <HeaderTemplate> ... </HeaderTemplate> <ItemTemplate> ... </ItemTemplate> <FooterTemplate> ... </FooterTemplate>

</asp:DataList> </form> </body> </html>

A continuacin, aadimos el script que crea el conjunto de datos y se une al DataSet mycdcatalog al control DataList. Tambin llenar el control DataList con un <HeaderTemplate> que contiene el encabezado de la tabla, un <ItemTemplate> que contiene los elementos de datos para mostrar, y <FooterTemplate> una que contiene un texto. Tenga en cuenta que el atributo de lneas de la cuadrcula del control DataList se ajusta a "ambos" para mostrar bordes de la tabla:

Ejemplo
<%@ Import Namespace="System.Data" %> <script runat="server"> sub Page_Load if Not Page.IsPostBack then dim mycdcatalog=New DataSet mycdcatalog.ReadXml(MapPath("cdcatalog.xml")) cdcatalog.DataSource=mycdcatalog cdcatalog.DataBind() end if end sub </script> <html> <body> <form runat="server"> <asp:DataList id="cdcatalog" gridlines="both" runat="server"> <HeaderTemplate> My CD Catalog </HeaderTemplate> <ItemTemplate> "<%#Container.DataItem("title")%>" of <%#Container.DataItem("artist")%> -

$<%#Container.DataItem("price")%> </ItemTemplate> <FooterTemplate> Copyright Hege Refsnes </FooterTemplate> </asp:DataList> </form> </body> </html>

Ver ejemplo

Utilizacin de estilos
Tambin puede agregar estilos con el control DataList para hacer la salida ms elegante:

Ejemplo
<%@ Import Namespace="System.Data" %> <script runat="server"> sub Page_Load if Not Page.IsPostBack then dim mycdcatalog=New DataSet mycdcatalog.ReadXml(MapPath("cdcatalog.xml")) cdcatalog.DataSource=mycdcatalog cdcatalog.DataBind() end if end sub </script> <html> <body> <form runat="server"> <asp:DataList id="cdcatalog"

runat="server" cellpadding="2" cellspacing="2" borderstyle="inset" backcolor="#e8e8e8" width="100%" headerstyle-font-name="Verdana" headerstyle-font-size="12pt" headerstyle-horizontalalign="center" headerstyle-font-bold="true" itemstyle-backcolor="#778899" itemstyle-forecolor="#ffffff" footerstyle-font-size="9pt" footerstyle-font-italic="true"> <HeaderTemplate> My CD Catalog </HeaderTemplate> <ItemTemplate> "<%#Container.DataItem("title")%>" of <%#Container.DataItem("artist")%> $<%#Container.DataItem("price")%> </ItemTemplate> <FooterTemplate> Copyright Hege Refsnes </FooterTemplate> </asp:DataList> </form> </body> </html>

Ver ejemplo

Uso de la <AlternatingItemTemplate>

Usted puede agregar un elemento despus del elemento <AlternatingItemTemplate> <ItemTemplate> para describir la apariencia de alternar filas de salida. Usted puede estilo de los datos de la seccin <AlternatingItemTemplate> dentro del control DataList:

Ejemplo
<%@ Import Namespace="System.Data" %> <script runat="server"> sub Page_Load if Not Page.IsPostBack then dim mycdcatalog=New DataSet mycdcatalog.ReadXml(MapPath("cdcatalog.xml")) cdcatalog.DataSource=mycdcatalog cdcatalog.DataBind() end if end sub </script> <html> <body> <form runat="server"> <asp:DataList id="cdcatalog" runat="server" cellpadding="2" cellspacing="2" borderstyle="inset" backcolor="#e8e8e8" width="100%" headerstyle-font-name="Verdana" headerstyle-font-size="12pt" headerstyle-horizontalalign="center" headerstyle-font-bold="True" itemstyle-backcolor="#778899" itemstyle-forecolor="#ffffff" alternatingitemstyle-backcolor="#e8e8e8" alternatingitemstyle-forecolor="#000000" footerstyle-font-size="9pt" footerstyle-font-italic="True"> <HeaderTemplate>

My CD Catalog </HeaderTemplate> <ItemTemplate> "<%#Container.DataItem("title")%>" of <%#Container.DataItem("artist")%> $<%#Container.DataItem("price")%> </ItemTemplate> <AlternatingItemTemplate> "<%#Container.DataItem("title")%>" of <%#Container.DataItem("artist")%> $<%#Container.DataItem("price")%> </AlternatingItemTemplate> <FooterTemplate> &copy; Hege Refsnes </FooterTemplate> </asp:DataList> </form> </body> </html>

Ver ejemplo

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::

En esta oportunidad vamos a estudiar los siguientes temas Palabras reservadas del lenguaje C# El Mtodo 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 cdigo, como por ejemplo una clase, o una variable Tambin los mtodos necesitan ser referenciados por alguna palabra para poder usarlos, por ejemplo hemos estado usando el mtodo de entrada a la aplicacin al cual lo hemos denominada Main. public static void Main() La lnea anterior es una declaracin de mtodo y contiene tres palabras reservadas del lenguaje (public, static y void) y una que hace de identificador de dicho mtodo (Main) public class HelloGuruProgrammer En esta otra vemos una declaracin 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 estn 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 compilacin. Veamos un ejemplo :

Esta aplicacin nos dar error durante la compilacin, 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 situacin, pero imaginen si estn trabajando con un editor de texto que no tenga esta diferenciacin como por ejemplo el blok de notas de

Windows Veamos ahora el error de compilacin :

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 cdigo fuente en dicho lugar se encuentra el identificador no vlido usado (int class), tambin 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 compilacin, 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 smbolo @ int @class = 5; Pero como dije antes nos es una buena prctica Vemoslo en la hoja de cdigo La siguiente imagen muestra el cdigo modificado donde le interpuse el smbolo 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 compilacin de lo contrario habra aparecido donde seala la flecha roja, esto significa que el MSIL ha sido creado correctamente. EL METODO Main() Si recuerdan, en las entregas anteriores habamos dicho que todas nuestras aplicaciones deberan implementar el mtodo Main(), ya que ste registra el punto de entrada a nuestra aplicacin, ahora bien, tambin dijimos que dicho mtodo debera ser esttico (static) para que solo una copia del mtodo viviese en memoria y pblico (public) para que pueda ser accedido a l desde el exterior de la clase e inclusive de la aplicacin. En esta entrega vamos a ahondar un poco ms en dicho mtodo 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 prctica mantener todo el cdigo en una sola clase sino en varias, esto ayuda a ordenar y hacer mas entendible nuestro cdigo, tambin permite usar el concepto de reutilizacin de cdigo. Para el caso donde nuestro aplicativo posea ms de una clase, inclusive ms de un archivo de cdigo fuente es importante recordar que al menos una de las clases que conforman la aplicacin, debe implementar el mtodo Main(), no pueden haber mas de una clase que

implemente dicho mtodo, SOLO DEBE SER IMPLEMENTADO POR UNA , de lo contrario se producir un error de compilacin. Veamos un ejemplo El siguiente aplicativo lo llamar ejemplo2.cs, y estar conformado por 2 clases, ambas implementaran el mtodo Main()

Esto producir un error de compilacin ya que nuestra aplicacin implementa el mtodo 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 compilacin surgi el error, y adems el noble compilador nos est indicando cual fue Has more than entry point defined:

Tiene ms de un punto de entrada definido Obviamente con eliminar uno de los mtodos definidos se soluciona el problema pero vamos a eliminar ambos mtodos para ver que sucede

Esta aplicacin implementa 2 clases (Class1 y Class2) ambas clases definen un mtodo que hace algo, no importa que, es slo para ver el error que se producir a causa de que ninguna de las clases que conforman la aplicacin definen o implementan el mtodo 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 aplicacin resultante no posee o implementa el Mtodo Main() ejemplo2.exe does not contain a static Main method for an entry point el programa ejemplo2.exe no contiene el mtodo esttico Main para un punto de entrada

Ahora voy a modificar el aplicativo para que no surjan errores de compilacin, y eso lo hacemos asignando a al programa el mtodo 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 aplicacin, ahora el aplicativo estar conformado por dos clases en donde Class1 implementa dos mtodos y uno de ellos es el Main(). Veamos ahora el resultado de la compilacin

Perfecto ahora si todo esta en orden.Para terminar con el tema vamos a entender que en especial el Mtodo Main(), se compota como cualquier otro mtodo, por lo tanto tambin es posible hacer que dicho mtodo devuelva un valor una vez finalizada la aplicacin

Hasta ahora hemos estado utilizando nuestro mtodo como tipo void o sea que una vez finalizadas las acciones del mismo no devolver nada. Veamos las construcciones que soporta el mtodo Main() adems de las que hemos estado usando

1. Esta forma es la que hemos estado usando, o sea que no recibe parmetros como argumento de mtodo 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 mtodo ser guardado en la matriz de argumento que define como parmetro el mtodo Main(). Hasta ahora hemos estado ejecutando las aplicaciones que creamos desde Windows haciendo doble clic sobre ellas, pero perfectamente lo podramos hacer desde la misma consola, ejecutar nuestro programa resultante de la compilacin directamente desde la consola permite adems pasar parmetros al mtodo Main(), un ejemplo de ellos son los comandos de DOS como los que vimos antes, tomemos como ejemplo el comando CD este comando acepta parmetros y estos determinar la posicin 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 travs del disco y acepta como parmetros la ubicacin donde queremos ir, y recordemos que si en la consola digitamos un nombre de archivo, el SO. Verificar su extensin y si es EXE o BAT o COM entonces ejecutara el contenido del mismo, por lo tanto al adoptar nuestros programas resultantes de una compilacin la extensin EXE tambin se ejecutarn si nicamente digitamos su nombre Como ejemplo voy a modificar el aplicativo que venimos trabajando (ejemplo2) para que acepte parmetros 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 Mtodo Main() que es el que estamos estudiando.

Aqu esta el cdigo 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 ejecucin y como ahora acepta parmetros le voy a pasar mi nombre y veamos que sucede

Creo que la imagen lo dice todo, el mtodo WriteLine(), definido en la aplicacin muestra en pantalla la palabra Hola y concatena dicha palabra con el parmetro pasado desde la consola, en este caso mi nombre 3. la tercera forma del mtodo Main(), devuelve un entero cuando el programa llega a su fin, por ejemplo supongamos que una aplicacin externa llama a la nuestra para que trabaje en conjunto, sera bueno entonces que nuestra aplicacin 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 nmero distinto a 0 si lo hubieron). Vemoslo con un ejemplo, vamos a modificar el aplicativo para que devuelva 0 si no existieron errores

Aqu hay un par de lneas 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 algn error entonces el flujo saltar directo al catch para tratar el error, para nuestro ejemplo hacer que el mtodo 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 mtodo 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 mtodo Main() Muy bien ahora el siguiente paso es compilar el cdigo fuente y ejecutarlo para ver que sucede

Excelente, por lo tanto si la aplicacin que llamo a la nuestra recibe de nuestro mtodo 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 mtodo Main(), puede adems de hacer todo lo anterior, recibir valores como argumento de parmetros, de la misma forma que lo hicimos en la 2da construccin Vemoslo con un ejemplo Lo nico que voy a hacer es modificar el cdigo anterior para que la aplicacin acepte parmetros y mostrar en pantalla un texto predefinido concatenndolo al parmetro pasado desde la consola al mtodo Main()

Ahora compilo el cdigo fuente y ejecuto el archivo resultante pasndole como parmetro la palabra Hola

Perfecto no se produjeron errores, ahora lo que vamos a hacer es provocar un error para que el mtodo devuelva un valor distinto de 0, y eso lo podemos lograr de la siguiente forma Como en un punto de nuestra aplicacin existe una sentencia que trabaja con los argumentos pasados como parmetro al el mtodo 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 cdigo utilizramos los valores pasados al Mtodo Main(), aunque no le pasemos nada no se producirn errores

Bueno aqu se ve el error y de acuerdo al cdigo fuente sabemos que el mtodo 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 Mtodo Main() como void una vez terminada la ejecucin del mismo siempre retorna el valor 0, indicando el fin de la aplicacin Espero que les haya servido la entrega de hoy en la prxima 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.

S-ar putea să vă placă și