Introducción a C#
Antes de abordar todas las características inherentes y posibilidades que nos brinda el lenguaje C#, es necesario conocer algunos conceptos básicos sobre la plataforma en la cual se apoya y su entorno de tecnologías .NET.
¿Qué es .NET?
Es la denominación de Microsoft para su nueva arquitectura de tecnologías como: el .NET Framework, los lenguajes de programación .NET (C#, VB, C++, J#), herramientas y servidores .NET.
¿Qué es el .NET Framework?
Es la plataforma y componente principal de .NET, el cual brinda un conjunto de nuevas tecnologías y herramientas que nos proporcionan todo lo necesario para construir nuestras aplicaciones de diversos tipos ya sean: aplicaciones de consola, de Windows, Web Services, librerías de clases, aplicaciones web, aplicaciones para dispositivos inteligentes y otros. El .NET Framework está basando en estándares, básicamente en: HTTP, XML y SOAP lo que le permite una fácil interoperabilidad y migración a otras plataformas.
El .NET Framework está compuesto principalmente por: el CLR (Common Language Runtime o Lenguaje común en tiempo de ejecución) y la biblioteca de clases.
# El CLR (Lenguaje común en tiempo de ejecución)
El CLR es el encargado de ejecutar el código escrito en los distintos lenguajes de programación .NET y lo hace en un entorno manejado, esto significa que el CLR se encarga de toda la gestión tanto: en la creación de los objetos, manejo de memoria y recolección de basura.
Los compiladores de los distintos lenguajes ya sea por ejemplo de C# y VB .NET (Visual Basic .NET) compilan el código y obtienen como resultado un lenguaje intermedio llamado MSIL (Lenguaje Intermedio de Microsoft); luego este MSIL es compilado a código nativo o de máquina por el CLR en la primera ejecución, este proceso es realizado por el JIT (Just-In-Time o compilador en tiempo de ejecución). En la figura 1.1 se puede ver todo el proceso básico de la conversión del código fuente a código nativo o de máquina.
# Biblioteca de clases del .NET Framework
Como su nombre lo indica es un conjunto de clases que nos ayudan a reducir enormemente el trabajo de desarrollo, estas clases están ordenadas por distintas categorías lo que se conoce como espacios de nombres (Namespaces en inglés). Existen clases para todo tipo de funcionalidad: para trabajar con archivos, acceder a bases de datos, acceso a servicios del sistema, ejecución de hilos, comunicaciones en red, seguridad, crear aplicaciones Windows, Web, etc.
El lenguaje de programación C#
C# es un lenguaje de programación moderno, completamente orientado a objetos y se podría decir que es tanto una evolución de los lenguajes C++ y Java, ya que incorpora las mejoras características de cada uno de ellos.
C# es un lenguaje muy estricto en su sintaxis ya que obliga a que se declaren todas las variables, las conversiones de datos deber ser explícitas, es sensible a mayúsculas y otras características que lo convierte en un lenguaje muy formal. Esto no sucede en otros lenguajes al menos de forma inicial como en Visual Basic .NET, y aunque esta formalidad puede ser una dificultad al comienzo a la larga ayuda al desarrollador a su formación ya que le proporciona mayor disciplina.
# La estructura básica de un programa en C#
Todo programa en C# debe tener obligatoriamente una clase y un punto de inicio el cual está dado por el método Main (método principal).
Para declarar una clase se utiliza la palabra reservada class y el nombre de la clase, el contenido o implementación de la clase se coloca dentro de una llave de apertura y una de cierre.
class Nombre
{
// Contenido o Implementación de la Clase
}
Por ejemplo para declarar una clase con el nombre Persona sería de la siguiente forma:
class Persona
{
}
Como se mencionó anteriormente el método Main es el método principal, ya que es el que proporciona el punto de inicio del programa, este método tiene las siguientes formas básicas:
static void Main()
{
}
Esta es la forma más sencilla, al comienzo del método se observa la palabra reservada static es un modificador de ámbito o alcance del método; el método Main siempre debe ser estático lo cual permite la ejecución del método sin haber creado o instanciado un objeto de la clase. La regla general es que antes de usar los métodos de una clase se debe crear o instanciar un objeto primero, pero esta regla se rompe cuando utilizamos el modificador static.
La segunda palabra reservada que se puede ver es void la cual indica que el método no devuelve o retorna ningún valor, a continuación está el nombre del método en este caso Main y no recibe parámetros o argumentos ya que no hay ninguno dentro de los paréntesis. El código del método o funcionalidad se coloca dentro de las llaves de inicio y cierre {}, en este caso el método no hace nada porque no hay código alguno.
Ahora veamos la segunda forma del método Main.
static int Main()
{
return 0;
}
En esta segunda forma el método devuelve un entero por ello utiliza la palabra reservada int y por lo cual al final del método es necesario colocar la palabra reservada return junto al valor de retorno, en este caso como es un entero el método retorna o devuelve un 0; esto se suele utilizar por ejemplo para saber si la ejecución fue correcta en este caso si devuelve 0 es correcta y si no lo es podemos hacer que retorne otro valor por ejemplo 1, entonces utilizaríamos return 1.
Como se mencionó anteriormente el método debe ser estático para que se pueda ejecutar sin crear un objeto de la clase donde está albergado y también como el caso anterior no recibe argumentos. A continuación la tercera forma del método Main.
static void Main(string[] args)
{
}
En esta tercera forma la cual es muy similar a la primera pero a diferencia de esta, recibe un parámetro dado en la variable args que es un arreglo de string (conjunto de cadenas), esto se suele utilizar por ejemplo en algunos programas para pasarle parámetros al método al ejecutarlo en la línea de comandos.
Como ejemplo podemos citar los programas que utilizamos en la línea de comandos o símbolo del sistema en su gran mayoría todos reciben parámetros, tenemos el caso del programa “format” que al utilizarlo debemos pasar como argumento la unidad a formatear así como de otros parámetros adicionales si es necesario. Esta tercera forma del método Main es muy útil cuando se requiere recibir parámetros del usuario directamente de la línea de comandos.
Por último la cuarta forma básica del método Main se muestra a continuación.
static int Main(string[] args)
{
return 0;
}
En esta última forma se puede ver que es como el caso anterior que recibe el mismo parámetro args, pero se diferencia en que devuelve un entero es por ello que lleva la palabra reservada int y al final del método la instrucción return 0.
Entonces el programa más básico en C# podría ser el siguiente:
class Programa
{
static void Main()
{
}
}
El código anterior cumple con lo necesario, ya que tiene una clase y un punto de inicio (Método Main).
Figura 1.1. Diagrama en bloque de la Compilación y Ejecución de un programa en .NET.
En nuestro primer programa vamos hacer el típico ejemplo Hola Mundo, para empezar inicie su Visual C# 2005 Express Edition por defecto le aparecerá la página de inicio (Start Page), en la figura 1.2 se puede ver una descripción breve de la funcionalidad de cada panel de esta página.
Para crear un nuevo proyecto haga clic en Project… el cual se encuentra en el primer panel de la página de inicio en la opción Create, o bien puede ir al menú File y a continuación elija New Project.
Una vez realizada la operación anterior aparecerá un cuadro de diálogo como el que se muestra en la figura 1.3, el cual le permite crear varios tipos de proyectos. Elija Console Application y escriba como nombre del proyecto HolaMundo y por último haga clic en el botón OK.
Al presionar en el botón OK, se crea la solución del proyecto con un conjunto de archivos por defecto, estos archivos se pueden ver en la ventana Solution Explorer ubicada por defecto a la derecha. Si no puede ver la ventana Solution Explorer, para habilitarla vaya al menú View y elija Solution Explorer. Esta ventana tendrá un aspecto como el de la figura 1.4.
En la ventana Solution Explorer se puede observar los siguientes archivos del proyecto: AssemblyInfo.cs el cual nos permite configurar algunas características generales del proyecto (como la versión, cultura, fabricante, descripción del ensamblado, etc.) y también se tiene el archivo Program.cs en éste se encuentra el código fuente de nuestra aplicación consola. Otra sección que se observa es la de References el cual contiene las referencias de las bibliotecas de clases que estamos usando ya sea del .NET Framework u otra externa.
La utilidad de la ventana Solution Explorer es proporcionarnos una vista de toda la estructura de nuestra aplicación, básicamente para acceder fácilmente a cada archivo del proyecto y trabajar con él. Si no está abierto el archivo Program.cs ábralo haciendo doble clic en él y se mostrará en el editor de código lo siguiente:
using System;
using System.Collections.Generic;
using System.Text;
namespace HolaMundo
{
class Program
{
static void Main(string[] args)
{
}
}
}
Como se puede observar tiene las dos características básicas de un programa de C#, una clase y un punto de inicio dado por el método Main. En este caso el generador de código del IDE de Visual C# (Entorno de Desarrollo Integrado de Visual C#) nos creó todo ese código, el cual contiene el esqueleto básico de nuestro programa.
En las primeras tres líneas del código se puede observar la palabra reservada using, la cual permite habilitar el uso de bibliotecas de clases, en este caso se coloca el espacio de nombre de la biblioteca de clase que necesitemos utilizar, en este programa por defecto están: System, System.Collections.Generic y System.Text. Otros ejemplos de espacios de nombre son: para trabajar con seguridad System.Security, para trabajar con datos System.Data, para trabajar con hilos System.Threading, etc.
Luego de las primeras tres líneas del código anterior se ve la definición de un namespace (espacio de nombre) propio para nuestro programa llamado HolaMundo, y dentro de éste se encuentra la definición de la clase y del método Main.
Para escribir el mensaje “Hola Mundo” utilizamos la siguiente instrucción:
Console.Write("Hola Mundo");
El método Write nos permite escribir un mensaje en pantalla, el mensaje está entre comillas dobles porque se trata de una cadena y por último la instrucción finaliza con un punto y coma, ya que es una regla de sintaxis de C# que dice que todas las instrucciones deben terminar con un punto y coma.
Al comienzo de la instrucción anterior se observa la palabra Console, esta se coloca allí porque es el espacio de nombre de donde proviene el método Write que a su vez se encuentra dentro del namespace System, que se declaró en la primera línea. Si no hubiéramos hecho esa declaración tendríamos que incluir la palabra System en la instrucción ya que es el namespace raíz de donde se encuentra el método Write, así como se muestra a continuación.
System.Console.Write("Hola Mundo");
Entonces el código de nuestra aplicación quedaría:
using System;
using System.Collections.Generic;
using System.Text;
namespace HolaMundo
{
class Program
{
static void Main(string[] args)
{
Console.Write("Hola Mundo");
}
}
}
Para guardar el proyecto haga clic en el icono Save All (Guardar Todo) de la barra de herramientas como se muestra en la figura 1.5 o bien vaya al menú File y elija Save All, si es la primera vez que guarda el proyecto le aparecerá un cuadro de diálogo donde podrá escoger la ruta o lugar para almacenar el proyecto, por último haga clic en el botón Save.
Figura 1.5. Botón Save All de la barra de herramientas.
Para ejecutar el programa presione la tecla F5 o vaya al menú Debug y elija Start Debugging. Al ejecutarse el programa vemos que aparece la ventana de la consola pero rápidamente se vuelve a cerrar, esto sucede porque no hemos colocado ninguna instrucción que nos permita hacer una pausa antes de la finalización de la aplicación. Para solucionar lo anterior escribimos la siguiente instrucción:
Console.Read();
Esta función hace una parada para leer un carácter de la consola, lo que detendrá la ejecución y así podremos ver el mensaje antes que se cierre el programa.
Entonces el código final de nuestro primer ejemplo quedaría de la siguiente forma:
using System;
using System.Collections.Generic;
using System.Text;
namespace HolaMundo
{
class Program
{
static void Main(string[] args)
{
Console.Write("Hola Mundo");
Console.Read();
}
}
}
Para ejecutar el programa nuevamente presione F5 y tendrá como resultado la Figura 1.6.
Resumen
En esta lección se vieron los conceptos básicos de .NET, incluyendo un estudio sobre su componente principal el .NET Framework; también se analizó la estructura básica de un programa en C# y se describió todo el proceso para la creación de un programa utilizando el IDE de Visual C# 2005.
Ejercicios Propuestos
1. Realice un programa de tipo consola para mostrar en pantalla sus datos personales con el siguiente formato:
Mis Datos Personales
---------------------------------------
Nombre: Escriba su nombre.
Edad: Escriba su edad.
Dirección: Escriba su dirección.
Teléfono: Escriba su teléfono.
2. Realice un programa de tipo consola que muestre su nombre en pantalla, modifique la definición del método Main creada por defecto a la segunda forma vista en la lección.
Antes de abordar todas las características inherentes y posibilidades que nos brinda el lenguaje C#, es necesario conocer algunos conceptos básicos sobre la plataforma en la cual se apoya y su entorno de tecnologías .NET.
¿Qué es .NET?
Es la denominación de Microsoft para su nueva arquitectura de tecnologías como: el .NET Framework, los lenguajes de programación .NET (C#, VB, C++, J#), herramientas y servidores .NET.
¿Qué es el .NET Framework?
Es la plataforma y componente principal de .NET, el cual brinda un conjunto de nuevas tecnologías y herramientas que nos proporcionan todo lo necesario para construir nuestras aplicaciones de diversos tipos ya sean: aplicaciones de consola, de Windows, Web Services, librerías de clases, aplicaciones web, aplicaciones para dispositivos inteligentes y otros. El .NET Framework está basando en estándares, básicamente en: HTTP, XML y SOAP lo que le permite una fácil interoperabilidad y migración a otras plataformas.
El .NET Framework está compuesto principalmente por: el CLR (Common Language Runtime o Lenguaje común en tiempo de ejecución) y la biblioteca de clases.
# El CLR (Lenguaje común en tiempo de ejecución)
El CLR es el encargado de ejecutar el código escrito en los distintos lenguajes de programación .NET y lo hace en un entorno manejado, esto significa que el CLR se encarga de toda la gestión tanto: en la creación de los objetos, manejo de memoria y recolección de basura.
Los compiladores de los distintos lenguajes ya sea por ejemplo de C# y VB .NET (Visual Basic .NET) compilan el código y obtienen como resultado un lenguaje intermedio llamado MSIL (Lenguaje Intermedio de Microsoft); luego este MSIL es compilado a código nativo o de máquina por el CLR en la primera ejecución, este proceso es realizado por el JIT (Just-In-Time o compilador en tiempo de ejecución). En la figura 1.1 se puede ver todo el proceso básico de la conversión del código fuente a código nativo o de máquina.
# Biblioteca de clases del .NET Framework
Como su nombre lo indica es un conjunto de clases que nos ayudan a reducir enormemente el trabajo de desarrollo, estas clases están ordenadas por distintas categorías lo que se conoce como espacios de nombres (Namespaces en inglés). Existen clases para todo tipo de funcionalidad: para trabajar con archivos, acceder a bases de datos, acceso a servicios del sistema, ejecución de hilos, comunicaciones en red, seguridad, crear aplicaciones Windows, Web, etc.
El lenguaje de programación C#
C# es un lenguaje de programación moderno, completamente orientado a objetos y se podría decir que es tanto una evolución de los lenguajes C++ y Java, ya que incorpora las mejoras características de cada uno de ellos.
C# es un lenguaje muy estricto en su sintaxis ya que obliga a que se declaren todas las variables, las conversiones de datos deber ser explícitas, es sensible a mayúsculas y otras características que lo convierte en un lenguaje muy formal. Esto no sucede en otros lenguajes al menos de forma inicial como en Visual Basic .NET, y aunque esta formalidad puede ser una dificultad al comienzo a la larga ayuda al desarrollador a su formación ya que le proporciona mayor disciplina.
# La estructura básica de un programa en C#
Todo programa en C# debe tener obligatoriamente una clase y un punto de inicio el cual está dado por el método Main (método principal).
Para declarar una clase se utiliza la palabra reservada class y el nombre de la clase, el contenido o implementación de la clase se coloca dentro de una llave de apertura y una de cierre.
class Nombre
{
// Contenido o Implementación de la Clase
}
Por ejemplo para declarar una clase con el nombre Persona sería de la siguiente forma:
class Persona
{
}
Como se mencionó anteriormente el método Main es el método principal, ya que es el que proporciona el punto de inicio del programa, este método tiene las siguientes formas básicas:
static void Main()
{
}
Esta es la forma más sencilla, al comienzo del método se observa la palabra reservada static es un modificador de ámbito o alcance del método; el método Main siempre debe ser estático lo cual permite la ejecución del método sin haber creado o instanciado un objeto de la clase. La regla general es que antes de usar los métodos de una clase se debe crear o instanciar un objeto primero, pero esta regla se rompe cuando utilizamos el modificador static.
La segunda palabra reservada que se puede ver es void la cual indica que el método no devuelve o retorna ningún valor, a continuación está el nombre del método en este caso Main y no recibe parámetros o argumentos ya que no hay ninguno dentro de los paréntesis. El código del método o funcionalidad se coloca dentro de las llaves de inicio y cierre {}, en este caso el método no hace nada porque no hay código alguno.
Ahora veamos la segunda forma del método Main.
static int Main()
{
return 0;
}
En esta segunda forma el método devuelve un entero por ello utiliza la palabra reservada int y por lo cual al final del método es necesario colocar la palabra reservada return junto al valor de retorno, en este caso como es un entero el método retorna o devuelve un 0; esto se suele utilizar por ejemplo para saber si la ejecución fue correcta en este caso si devuelve 0 es correcta y si no lo es podemos hacer que retorne otro valor por ejemplo 1, entonces utilizaríamos return 1.
Como se mencionó anteriormente el método debe ser estático para que se pueda ejecutar sin crear un objeto de la clase donde está albergado y también como el caso anterior no recibe argumentos. A continuación la tercera forma del método Main.
static void Main(string[] args)
{
}
En esta tercera forma la cual es muy similar a la primera pero a diferencia de esta, recibe un parámetro dado en la variable args que es un arreglo de string (conjunto de cadenas), esto se suele utilizar por ejemplo en algunos programas para pasarle parámetros al método al ejecutarlo en la línea de comandos.
Como ejemplo podemos citar los programas que utilizamos en la línea de comandos o símbolo del sistema en su gran mayoría todos reciben parámetros, tenemos el caso del programa “format” que al utilizarlo debemos pasar como argumento la unidad a formatear así como de otros parámetros adicionales si es necesario. Esta tercera forma del método Main es muy útil cuando se requiere recibir parámetros del usuario directamente de la línea de comandos.
Por último la cuarta forma básica del método Main se muestra a continuación.
static int Main(string[] args)
{
return 0;
}
En esta última forma se puede ver que es como el caso anterior que recibe el mismo parámetro args, pero se diferencia en que devuelve un entero es por ello que lleva la palabra reservada int y al final del método la instrucción return 0.
Entonces el programa más básico en C# podría ser el siguiente:
class Programa
{
static void Main()
{
}
}
El código anterior cumple con lo necesario, ya que tiene una clase y un punto de inicio (Método Main).
Figura 1.1. Diagrama en bloque de la Compilación y Ejecución de un programa en .NET.
En nuestro primer programa vamos hacer el típico ejemplo Hola Mundo, para empezar inicie su Visual C# 2005 Express Edition por defecto le aparecerá la página de inicio (Start Page), en la figura 1.2 se puede ver una descripción breve de la funcionalidad de cada panel de esta página.
Para crear un nuevo proyecto haga clic en Project… el cual se encuentra en el primer panel de la página de inicio en la opción Create, o bien puede ir al menú File y a continuación elija New Project.
Una vez realizada la operación anterior aparecerá un cuadro de diálogo como el que se muestra en la figura 1.3, el cual le permite crear varios tipos de proyectos. Elija Console Application y escriba como nombre del proyecto HolaMundo y por último haga clic en el botón OK.
Al presionar en el botón OK, se crea la solución del proyecto con un conjunto de archivos por defecto, estos archivos se pueden ver en la ventana Solution Explorer ubicada por defecto a la derecha. Si no puede ver la ventana Solution Explorer, para habilitarla vaya al menú View y elija Solution Explorer. Esta ventana tendrá un aspecto como el de la figura 1.4.
En la ventana Solution Explorer se puede observar los siguientes archivos del proyecto: AssemblyInfo.cs el cual nos permite configurar algunas características generales del proyecto (como la versión, cultura, fabricante, descripción del ensamblado, etc.) y también se tiene el archivo Program.cs en éste se encuentra el código fuente de nuestra aplicación consola. Otra sección que se observa es la de References el cual contiene las referencias de las bibliotecas de clases que estamos usando ya sea del .NET Framework u otra externa.
La utilidad de la ventana Solution Explorer es proporcionarnos una vista de toda la estructura de nuestra aplicación, básicamente para acceder fácilmente a cada archivo del proyecto y trabajar con él. Si no está abierto el archivo Program.cs ábralo haciendo doble clic en él y se mostrará en el editor de código lo siguiente:
using System;
using System.Collections.Generic;
using System.Text;
namespace HolaMundo
{
class Program
{
static void Main(string[] args)
{
}
}
}
Como se puede observar tiene las dos características básicas de un programa de C#, una clase y un punto de inicio dado por el método Main. En este caso el generador de código del IDE de Visual C# (Entorno de Desarrollo Integrado de Visual C#) nos creó todo ese código, el cual contiene el esqueleto básico de nuestro programa.
En las primeras tres líneas del código se puede observar la palabra reservada using, la cual permite habilitar el uso de bibliotecas de clases, en este caso se coloca el espacio de nombre de la biblioteca de clase que necesitemos utilizar, en este programa por defecto están: System, System.Collections.Generic y System.Text. Otros ejemplos de espacios de nombre son: para trabajar con seguridad System.Security, para trabajar con datos System.Data, para trabajar con hilos System.Threading, etc.
Luego de las primeras tres líneas del código anterior se ve la definición de un namespace (espacio de nombre) propio para nuestro programa llamado HolaMundo, y dentro de éste se encuentra la definición de la clase y del método Main.
Para escribir el mensaje “Hola Mundo” utilizamos la siguiente instrucción:
Console.Write("Hola Mundo");
El método Write nos permite escribir un mensaje en pantalla, el mensaje está entre comillas dobles porque se trata de una cadena y por último la instrucción finaliza con un punto y coma, ya que es una regla de sintaxis de C# que dice que todas las instrucciones deben terminar con un punto y coma.
Al comienzo de la instrucción anterior se observa la palabra Console, esta se coloca allí porque es el espacio de nombre de donde proviene el método Write que a su vez se encuentra dentro del namespace System, que se declaró en la primera línea. Si no hubiéramos hecho esa declaración tendríamos que incluir la palabra System en la instrucción ya que es el namespace raíz de donde se encuentra el método Write, así como se muestra a continuación.
System.Console.Write("Hola Mundo");
Entonces el código de nuestra aplicación quedaría:
using System;
using System.Collections.Generic;
using System.Text;
namespace HolaMundo
{
class Program
{
static void Main(string[] args)
{
Console.Write("Hola Mundo");
}
}
}
Para guardar el proyecto haga clic en el icono Save All (Guardar Todo) de la barra de herramientas como se muestra en la figura 1.5 o bien vaya al menú File y elija Save All, si es la primera vez que guarda el proyecto le aparecerá un cuadro de diálogo donde podrá escoger la ruta o lugar para almacenar el proyecto, por último haga clic en el botón Save.
Figura 1.5. Botón Save All de la barra de herramientas.
Para ejecutar el programa presione la tecla F5 o vaya al menú Debug y elija Start Debugging. Al ejecutarse el programa vemos que aparece la ventana de la consola pero rápidamente se vuelve a cerrar, esto sucede porque no hemos colocado ninguna instrucción que nos permita hacer una pausa antes de la finalización de la aplicación. Para solucionar lo anterior escribimos la siguiente instrucción:
Console.Read();
Esta función hace una parada para leer un carácter de la consola, lo que detendrá la ejecución y así podremos ver el mensaje antes que se cierre el programa.
Entonces el código final de nuestro primer ejemplo quedaría de la siguiente forma:
using System;
using System.Collections.Generic;
using System.Text;
namespace HolaMundo
{
class Program
{
static void Main(string[] args)
{
Console.Write("Hola Mundo");
Console.Read();
}
}
}
Para ejecutar el programa nuevamente presione F5 y tendrá como resultado la Figura 1.6.
Resumen
En esta lección se vieron los conceptos básicos de .NET, incluyendo un estudio sobre su componente principal el .NET Framework; también se analizó la estructura básica de un programa en C# y se describió todo el proceso para la creación de un programa utilizando el IDE de Visual C# 2005.
Ejercicios Propuestos
1. Realice un programa de tipo consola para mostrar en pantalla sus datos personales con el siguiente formato:
Mis Datos Personales
---------------------------------------
Nombre: Escriba su nombre.
Edad: Escriba su edad.
Dirección: Escriba su dirección.
Teléfono: Escriba su teléfono.
2. Realice un programa de tipo consola que muestre su nombre en pantalla, modifique la definición del método Main creada por defecto a la segunda forma vista en la lección.