Palabras Reservadas de ASP-net

31
Un controlador de eventos es una subrutina que ejecuta el código para un evento determinado. ASP.NET - controladores de eventos Mira el siguiente código: <% lbl1.Text="The date and time is " & now() %> <html> <body> <form runat="server"> <h3><asp:label id="lbl1" runat="server" /></h3> </form> </body> </html> ¿Cuándo el código 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 página y ASP.NET automáticamente llamará a la subrutina Page_Load, y ejecutar el código 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>

Transcript of Palabras Reservadas de ASP-net

Page 1: Palabras Reservadas de ASP-net

Un controlador de eventos es una subrutina que ejecuta el código para un evento

determinado.

ASP.NET - controladores de eventos

Mira el siguiente código:

<%

lbl1.Text="The date and time is " & now()

%>

<html>

<body>

<form runat="server">

<h3><asp:label id="lbl1" runat="server" /></h3>

</form>

</body>

</html>

¿Cuándo el código 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 página y ASP.NET automáticamente llamará a la

subrutina Page_Load, y ejecutar el código 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>

Page 2: Palabras Reservadas de ASP-net

</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 página. Si desea ejecutar el

código en la subrutina Page_Load sólo la primera vez que se carga la página, puede utilizar

la propiedad Page.IsPostBack. Si la propiedad Page.IsPostBack es falsa, la página se carga

por primera vez, si bien es cierto, la página se devuelva al servidor (es decir, de un clic de

botón 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 sólo la primera vez

que se carga la página. Cuando un usuario hace clic en el botón Enviar, la subrutina submit

Page 3: Palabras Reservadas de ASP-net

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 colección de artículos que contengan un valor de datos único.

Los elementos se agregan a la ArrayList con el método add ().

El código 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 tamaño hasta su tamaño final con el método 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

Page 4: Palabras Reservadas de ASP-net

end sub

</script>

Un ArrayList también se pueden ordenar alfabéticamente o numéricamente con el método

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 método Reverse () después del método 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

Page 5: Palabras Reservadas de ASP-net

Un objeto ArrayList puede generar automáticamente 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 página aspx.:

<html>

<body>

<form runat="server">

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

</form>

</body>

</html>

A continuación, añadir 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>

Page 6: Palabras Reservadas de ASP-net

<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 método 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 búsquedas muy rápidas se pueden establecer valores de referencia mediante la

búsqueda a través de sus teclas.

Los elementos se agregan a la tabla hash con el método add ().

El siguiente código crea una Hashtable mycountries con nombre y cuatro elementos se

añaden:

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

Page 7: Palabras Reservadas de ASP-net

Enlace de datos

Un objeto Hashtable puede generar automáticamente 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 página aspx.:

<html>

<body>

<form runat="server">

<asp:RadioButtonList id="rb" runat="server" AutoPostBack="True" />

</form>

</body>

</html>

A continuación, añadir 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>

Page 8: Palabras Reservadas de ASP-net

<form runat="server">

<asp:RadioButtonList id="rb" runat="server" AutoPostBack="True" />

</form>

</body>

</html>

A continuación añadimos una subrutina que se ejecuta cuando el usuario hace clic en un

elemento en el control RadioButtonList. Cuando un botón 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 »

Page 9: Palabras Reservadas de ASP-net

Nota: No se puede elegir el orden de los elementos agregados a la Hashtable. Para ordenar

los elementos alfabéticamente o numéricamente, utilice el objeto SortedList.

El objeto SortedList

El objeto SortedList contiene elementos de pares clave / valor. Un objeto SortedList

automáticamente ordenar los elementos en orden alfabético o numérico.

Los elementos se agregan a la colección SortedList con el método add (). Una SortedList

puede ser de un tamaño hasta su tamaño final con el método TrimToSize ().

El siguiente código crea una mycountries SortedList nombre y se añaden 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 automáticamente 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 página aspx.:

<html>

<body>

Page 10: Palabras Reservadas de ASP-net

<form runat="server">

<asp:RadioButtonList id="rb" runat="server" AutoPostBack="True" />

</form>

</body>

</html>

A continuación, añadir 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 continuación añadimos una subrutina que se ejecuta cuando el usuario hace clic en un

elemento en el control RadioButtonList. Cuando un botón es pulsado, el texto aparecerá en

una etiqueta:

Ejemplo

<script runat="server">

sub Page_Load

if Not Page.IsPostBack then

dim mycountries=New SortedList

Page 11: Palabras Reservadas de ASP-net

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 cómo 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>

Page 12: Palabras Reservadas de ASP-net

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

Page 13: Palabras Reservadas de ASP-net

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 página aspx.:

<%@ Import Namespace="System.Data" %>

A continuación, cree un conjunto de datos para el archivo XML y cargar el archivo XML

en el conjunto de datos cuando la página 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 página. Aspx. El contenido del elemento

<HeaderTemplate> se representan primero y sólo 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>

Page 14: Palabras Reservadas de ASP-net

</asp:DataList>

</form>

</body>

</html>

A continuación, añadimos el script que crea el conjunto de datos y se une al DataSet

mycdcatalog al control DataList. También 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 líneas de la cuadrícula 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")%> -

Page 15: Palabras Reservadas de ASP-net

$<%#Container.DataItem("price")%>

</ItemTemplate>

<FooterTemplate>

Copyright Hege Refsnes

</FooterTemplate>

</asp:DataList>

</form>

</body>

</html>

Ver ejemplo »

Utilización de estilos

También puede agregar estilos con el control DataList para hacer la salida más 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"

Page 16: Palabras Reservadas de ASP-net

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>

Page 17: Palabras Reservadas de ASP-net

Usted puede agregar un elemento después del elemento <AlternatingItemTemplate>

<ItemTemplate> para describir la apariencia de alternar filas de salida. Usted puede estilo

de los datos de la sección <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>

Page 18: Palabras Reservadas de ASP-net

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 Método Main() en profundidad

Page 19: Palabras Reservadas de ASP-net

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:

Page 20: Palabras Reservadas de ASP-net

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

Page 21: Palabras Reservadas de ASP-net

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

Page 22: Palabras Reservadas de ASP-net

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

Page 23: Palabras Reservadas de ASP-net

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:”

Page 24: Palabras Reservadas de ASP-net

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”

Page 25: Palabras Reservadas de ASP-net

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

Page 26: Palabras Reservadas de ASP-net

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.

Page 27: Palabras Reservadas de ASP-net

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

Page 28: Palabras Reservadas de ASP-net

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

Page 29: Palabras Reservadas de ASP-net

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()

Page 30: Palabras Reservadas de ASP-net

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

Page 31: Palabras Reservadas de ASP-net

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.