palabras reservadas de asp-net
TRANSCRIPT
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>
</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
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
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
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>
<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>
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>
<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 »
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>
<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
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>
<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 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>
</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")%> -
$<%#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"
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 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>
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>
© 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
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.