Introducción a C#

- seguce92 - C Sharp

Requisitos previos recomendados

En principio, para entender con facilidad esta obra es recomendable estar familiarizado con los conceptos básicos de programación orientada a objetos, en particular con los lenguajes de programación C++ o Java de los que C# deriva.

Sin embargo, estos no son requisitos fundamentales para entenderla ya que cada vez que en ella se introduce algún elemento del lenguaje se definen y explican los conceptos básicos que permiten entenderlo. Aun así, sigue siendo recomendable disponer de los requisitos antes mencionados para poder moverse con mayor soltura por el libro y aprovecharlo al máximo.

Microsoft.NET

Microsoft.NET es el conjunto de nuevas tecnologías en las que Microsoft ha estado trabajando durante los últimos años con el objetivo de obtener una plataforma sencilla y potente para distribuir el software en forma de servicios que puedan ser suministrados remotamente y que puedan comunicarse y combinarse unos con otros de manera totalmente independiente de la plataforma, lenguaje de programación y modelo de componentes con los que hayan sido desarrollados. Ésta es la llamada plataforma .NET, y a los servicios antes comentados se les denomina servicios Web.

Para crear aplicaciones para la plataforma .NET, tanto servicios Web como aplicaciones tradicionales (aplicaciones de consola, aplicaciones de ventanas, servicios de Windows

NT, etc.), Microsoft ha publicado el denominado kit de desarrollo de software conocido como .NET Framework SDK, que incluye las herramientas necesarias tanto para su desarrollo como para su distribución y ejecución y Visual Studio.NET, que permite hacer todo la anterior desde una interfaz visual basada en ventanas. Ambas herramientas puede descargarse gratuitamente desde http://www.msdn.microsoft.com/net, aunque la última sólo está disponible para subscriptores MSDN Universal (los no subscriptores pueden pedirlo desde dicha dirección y se les enviará gratis por correo ordinario)

El concepto de Microsoft.NET también incluye al conjunto de nuevas aplicaciones que

Microsoft y terceros han (o están) desarrollando para ser utilizadas en la plataforma

.NET. Entre ellas podemos destacar aplicaciones desarrolladas por Microsoft tales como

Windows.NET, Hailstorm, Visual Studio.NET, MSN.NET, Office.NET, y los nuevos servidores para empresas de Microsoft (SQL Server.NET, Exchange.NET, etc.)

Librería de clase base (BCL)

La Librería de Clase Base (BCL) es una librería incluida en el .NET Framework formada por cientos de tipos de datos que permiten acceder a los servicios ofrecidos por el CLR y a las funcionalidades más frecuentemente usadas a la hora de escribir programas. Además, a partir de estas clases prefabricadas el programador puede crear nuevas clases que mediante herencia extiendan su funcionalidad y se integren a la perfección con el resto de clases de la BCL.

Por ejemplo, implementando ciertos interfaces podemos crear nuevos tipos de colecciones que serán tratadas exactamente igual que cualquiera de las colecciones incluidas en la BCL.

Esta librería está escrita en MSIL, por lo que puede usarse desde cualquier lenguaje cuyo compilador genere MSIL. A través de las clases suministradas en ella es posible desarrollar cualquier tipo de aplicación, desde las tradicionales aplicaciones de ventanas, consola o servicio de Windows NT hasta los novedosos servicios Web y páginas ASP.NET. Es tal la riqueza de servicios que ofrece que puede crearse lenguajes que carezcan de librería de clases propia y sólo usen la BCL -como C#.

Modificadores de Acceso Admitidos

Modificador Accesibilidad
public Cualquier código.
private Código del mismo tipo de dato.
family Código del mismo tipo de dato o de hijos de este.
assembly Código del mismo ensamblado.
family and assembly Código del mismo tipo o de hijos de este, ubicado en el mismo ensamblado.
family or assembly Código del mismo tipo o de hijos de este, o código ubicado en el mismo ensamblado.

Estructura Básica de C#

Como primer contacto con el lenguaje, nada mejor que el típico programa de iniciación “¡Hola Mundo!” que lo único que hace al ejecutarse es mostrar por pantalla el mensaje ¡Hola Mundo! Su código es:

class HolaMundo
{
   static void Main()
   {
      System.Console.WriteLine(“¡Hola Mundo!”);
   }
}

Este código lo guardamos con una extensión .cs

Compilación en línea de comandos

Una vez escrito el código anterior con algún editor de textos –como el Bloc de Notas de Windows- y almacenado en formato de texto plano en un fichero HolaMundo.cs3, para compilarlo basta abrir una ventana de consola (MS-DOS en Windows), colocarse en el directorio donde se encuentre y pasárselo como parámetro al compilador así:

csc HolaMundo.cs

csc.exe es el compilador de C# incluido en el .NET Framework SDK para Windows de Microsoft, y es posible llamarlo desde cualquier directorio en tanto que al instalarlo se añade una referencia al mismo en el path. Si utiliza otros compiladores de C# puede que varié la forma en que se realice la compilación, por lo que lo que aquí se explica en principio sólo podría ser válido para el compilador de Microsoft para Windows.

Tras la compilación se obtendría un ejecutable llamado HolaMundo.exe cuya ejecución produciría la siguiente salida por la ventana de consola:

¡Hola Mundo!

Si la aplicación que se vaya a compilar no utilizase la ventana de consola para mostrar su salida sino una interfaz gráfica de ventanas, entonces habría que compilarla pasando al compilador la opción /t con el valor winexe antes del nombre del fichero a compilar. Si no se hiciese así se abríría la ventana de consola cada vez que ejecutase la aplicación de ventanas, lo que suele ser indeseable en este tipo de aplicaciones. Así, para compilar Ventanas.cs como ejecutable de ventanas sería conveniente escribir:

csc /t:winexe Ventanas.cs

Nótese que aunque el nombre winexe dé la sensación de que este valor para la opción /t sólo permite generar ejecutables de ventanas, en realidad lo que permite es generar ejecutables sin ventana de consola asociada. Por tanto, también puede usarse para generar ejecutables que no tengan ninguna interfaz asociada, ni de consola ni gráfica.

Si en lugar de un ejecutable -ya sea de consola o de ventanas- se desea obtener una librería, entonces al compilar hay que pasar al compilador la opción /t con el valor library. Por ejemplo, siguiendo con el ejemplo inicial habría que escribir:

csc /t:library HolaMundo.cs

En este caso se generaría un fichero HolaMundo.dll cuyos tipos de datos podrían utilizarse desde otros fuentes pasando al compilador una referencia a los mismos mediante la opción /r. Por ejemplo, para compilar como ejecutable una fuente A.cs que use la clase HolaMundo de la librería HolaMundo.dll se escribiría:

csc /r:HolaMundo.dll A.cs

En general /r permite referenciar a tipos definidos en cualquier ensamblado, por lo que el valor que se le indique también puede ser el nombre de un ejecutable. Además, en cada compilación es posible referenciar múltiples ensamblados ya sea incluyendo la opción /r una vez por cada uno o incluyendo múltiples referencias en una única opción /r usando comas o puntos y comas como separadores. Por ejemplo, las siguientes tres llamadas al compilador son equivalentes:

csc /r:HolaMundo.dll;Otro.dll;OtroMás.exe A.cs

csc /r:HolaMundo.dll,Otro.dll,OtroMás.exe A.cs

csc /t:HolaMundo.dll /r:Otro.dll /r:OtroMás.exe A.cs

Hay que señalar que aunque no se indique nada, en toda compilación siempre se referencia por defecto a la librería mscorlib.dll de la BCL, que incluye los tipos de uso más frecuente. Si se usan tipos de la BCL no incluidos en ella habrá que incluir al compilar referencias a las librerías donde estén definidos (en la documentación del SDK sobre cada tipo de la BCL puede encontrar información sobre donde se definió) Tanto las librerías como los ejecutables son ensamblados. Para generar un módulo de código que no forme parte de ningún ensamblado sino que contenga definiciones de tipos que puedan añadirse a ensamblados que se compilen posteriormente, el valor que ha de darse al compilar a la opción /t es module. Por ejemplo:

csc /t:module HolaMundo.cs

Con la instrucción anterior se generaría un módulo llamado HolaMundo.netmodule que podría ser añadido a compilaciones de ensamblados incluyéndolo como valor de la opción /addmodule. Por ejemplo, para añadir el módulo anterior a la compilación de la fuente librería Lib.cs como librería se escribiría:

csc /t:library /addmodule:HolaMundo.netmodule Lib.cs

Aunque hasta ahora todas las compilaciones de ejemplo se han realizado utilizando un único fichero de código fuente, en realidad nada impide que se puedan utilizar más. Por ejemplo, para compilar los ficheros A.cs y B.cs en una librería A.dll se ejecutaría:

csc /t:library A.cs B.cs

Nótese que el nombre que por defecto se dé al ejecutable generado siempre es igual al del primer fuente especificado pero con la extensión propia del tipo de compilación realizada (.exe para ejecutables, .dll para librerías y .netmodule para módulos) Sin embargo, puede especificárse como valor en la opción /out del compilador cualquier otro tal y como muestra el siguiente ejemplo que compila el fichero A.cs como una librería de nombre Lib.exe:

csc /t:library /out:Lib.exe A.cs

Véase que aunque se haya dado un nombre terminado en .exe al fichero resultante, éste sigue siendo una librería y no un ejecutable e intentar ejecutarlo producirían un mensaje de error. Obviamente no tiene mucho sentido darle esa extensión, y sólo se le ha dado en este ejemplo para demostrar que, aunque recomendable, la extensión del fichero no tiene porqué corresponderse realmente con el tipo de fichero del que se trate.

A la hora de especificar ficheros a compilar también es pueden utilizar los caracteres de comodín típicos del sistema operativo. Por ejemplo, para compilar todos los ficheros con extensión .cs del directorio actual en una librería llamada Varios.dll se haría:

csc /t:library /out:varios.dll *.cs

Con lo que hay que tener cuidado, y en especial al compilar varios fuentes, es con que no se compilen a la vez más de un tipo de dato con punto de entrada, pues entonces el compilador no sabría cuál usar como inicio de la aplicación. Para orientarlo, puede especificarse como valor de la opción /main el nombre del tipo que contenga el Main() a usar como punto de entrada. Así, para compilar los ficheros A.cs y B.cs en un ejecutable cuyo punto de entrada sea el definido en el tipo Principal, habría que escribir:

csc /main:Principal A.cs B.cs

Obviamente, para que esto funcione A.cs o B.cs tiene que contener alguna definición de algún tipo llamado Principal con un único método válido como punto de entrada. (obviamente si contiene varias se volvería a tener el problema de no saber cuál usar)

Una vez tocado estos puntos ahora a lo nuestro, programación con interfaz gráfica o compilación con Visual .Net. Para lo cual usaremos el ID de Microsoft que llegaría a ser Visual Studio 2010.

Lo primero conoceremos el entorno de Visual Studio 2010, este es la ventana inicio que nos aparecerá tras presionar doble clic sobre el icono de VS2010.

Vista Home de Visual Studio Para compilar un fragmento de código lo primero que debemos hacer es incluirla en un nuevo proyecto de VS.

Ese paso es sumamente sencillo presionamos en New Proyect o Nuevo Proyecto

(1)En el panel izquierdo de la nueva ventana seleccionamos la opción de C#, (2)en el panel medio de la misma ventana seleccionamos la opción de Windows Form Application o Aplicación Windows Form, (3)en la parte inferior damos el nombre y la dirección de nuestro nuevo proyecto. (4)Presionamos en el Botón OK y visual Studio creara todo lo necesario para una nueva aplicación. Listo ya creamos un proyecto nuevo.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Introduccion_a_Csharp
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }
  }
}

Cuadro de Propiedades

Esta ventana nos permite configurar de forma visual la mayoría de las opciones de cada elemento u objeto que incorporemos en nuestro formulario.

Ahora lo único que nos falta es arrastrar los componentes que queremos utilizarlos en nuestro formulario o ventana, desde el cuadro de herramientas.

Para compilar nuestro proyecto lo único que hacemos es presionar clic ejecutar o simplemente ejecutar a través de las tecla de acceso rápido f5.

Palabras reservadas

Aunque antes se han dado una serie de restricciones sobre cuáles son los nombres válidos que se pueden dar en C# a los identificadores, falta todavía por dar una: los siguientes nombres no son válidos como identificadores ya que tienen un significado especial en el lenguaje:

abstract, as, base, bool, break, byte, case, catch, char, checked, class, const, continue, decimal, default, delegate, do, double, else, enum, event, explicit, extern, false, finally, fixed, float, for, foreach, goto, if, implicit, in, int, interface, internal, lock, is, long, namespace, new, null, object, operator, out, override, params, private, protected, public, readonly, ref, return, sbyte, sealed, short, sizeof, stackalloc, static, string, struct, switch, this, throw, true, try, typeof, uint, ulong, unchecked, unsafe, ushort, using, virtual, void, while

Si por algún motivo se nos ocurriría usar una palabra reservada como el nombre de una variable c# te permite realizar esto, pero con un mecanismo especifico de un carácter @ para fijar el nombre de una variable que coincida con una palabra reservada de C#.

class @class
{
  static void @static(bool @bool)
  {
    if (@bool)
      Console.WriteLine(“cierto”);
    else
      Console.WriteLine(“falso”);
  }
}

Post Relacionados