manual es

115
Manuales .NET : Manual C# Índice Temático Básico » Intermedio » Avanzado ¿Qué es C#? Lenguaje Orientado a Objetos Objeto Herencia Clase Funciones Miembro Campos Estáticos Clase Base Clase Derivada Clase Abstracta Clase Sealed Overloading/Sobrecarga Herencia Simple Polimorfismo y Funciones Virtuales Encapsulación y Visibilidad Abstracción Plataforma .NET .NET Common Language Runtime - CLR Características del CLR .NET Runtime Environment Ambiente/Entorno de Ejecución Ensamblaje Interoperabilidad de Lenguaje Atributos Biblioteca de Clases de la Plataforma .NET Requerimientos de Software Lenguaje Intermedio y Metadatos JIT Sistema de Tipo Unificado El Sistema Virtual de Objetos - VOS VOS Type System Metadata y Reflection Seguridad Deployment Interoperabilidad con código no administrado Common Language Specification - CLS Virtual Execution System - VES

Upload: luzita-b

Post on 15-Sep-2015

13 views

Category:

Documents


4 download

DESCRIPTION

Manual

TRANSCRIPT

Manuales .NET : Manual C#

ndice Temtico

BsicoIntermedioAvanzado Qu es C#? Lenguaje Orientado a Objetos Objeto Herencia Clase Funciones Miembro Campos Estticos Clase Base Clase Derivada Clase Abstracta Clase Sealed Overloading/Sobrecarga Herencia Simple Polimorfismo y Funciones Virtuales Encapsulacin y Visibilidad Abstraccin Plataforma .NET .NET Common Language Runtime - CLR Caractersticas del CLR .NET Runtime Environment Ambiente/Entorno de Ejecucin Ensamblaje Interoperabilidad de Lenguaje Atributos Biblioteca de Clases de la Plataforma .NET Requerimientos de Software Lenguaje Intermedio y Metadatos JIT Sistema de Tipo Unificado El Sistema Virtual de Objetos - VOS VOS Type System Metadata y Reflection Seguridad Deployment Interoperabilidad con cdigo no administrado Common Language Specification - CLS Virtual Execution System - VES Tipos de Datos Constantes y Campos Solo Lectura Ejemplo Hello World! Ejemplo Args Ejemplo Input/Output Ejemplo String Format FuncinMain Mltiples FuncionesMain Preprocesamiento Comentarios Value Types Tipos simples Integral Bool Char Floating Point Decimal Tipos Estructura Tipos Enumeracin Tipos Referencia Tipo Objeto Tipo Clase Interfaces Delegados Tipo string Arreglos Arreglos Multidimensionales Arreglo de Arreglos Arreglos de Objetos Conversin de Arreglos Clase Array InterfaceIComparable InterfaceIComparer IComparerComo Propiedad Expresiones Regulares Operadoras Secuencias de Escape Boxing Conversiones Boxing Conversiones Unboxing Constructores y Destructores Constructor Esttico Mtodos Parmetros Valores en Parmetrosin Valores en Parmetrosref Valores en Parmetrosout Ejemplo de Parmetros In, Ref y Out Redefinicin de Mtodos (Overriding) Ocultamiento de Mtodos (Hiding) Propiedades Accessors Propiedades Estticas ndices Eventos Modificadores Modificadores de Clase Modificadores Miembro Modificadores de Acceso public protected private internal Sentencias de Control Sentencias de Seleccin Sentencia if Sentencia switch Sentencias de Iteracin (repeticin) Sentencia for Sentencia foreach Sentencia while Sentencia do Sentencias de Salto break continue goto return Asignacin Definitiva Precedencia de Operadores typeof is ConversionesBsicoIntermedioAvanzado Manejo de Excepciones Jerarqua de Excepciones Trabajar con Excepciones Chequeo de Overflow Chequeo programtico de Overflow Sentencias para el Manejo de Excepciones try - catch try - finally try - catch - finally Lanzamiento de Excepciones Relanzamiento de Excepciones Creacin de Clases Exception Componentes Creacin de Componentes Compilacin de Componentes Creacin de una Aplicacin Cliente Compilacin de Clientes Namespaces Envolver Clases en Namespace Utilizar Namespace en Aplicaciones Cliente Agregar Mltiples Clases a Un Namespace Namespace y Ensambles Compilacin Condicional Uso del Preprocesador Definicin de smbolos Exclusin de cdigo basado en smbolos Lanzamiento de errores y advertencias Atributo conditional Comentarios de Documentacin en XML Elementos XML Componentes .NET Componentes .NET Privados Componentes .NET Compartidos Interoperabilidad COM Uso de Componentes .NET en Componentes .COM Uso de Componentes COM en Componentes .NET Invocacin de Servicios Cdigo No Seguro Debugging Seguridad Seguridad de acceso al cdigo Permisos Estndar Permisos Identidad Seguridad basada en roles Funcin ToString() Funcin Equals()BsicoIntermedioAvanzado ClaseHashtable InterfaceIHashCodeProvider FuncinICloneable Formato Numrico Formato Personalizado String Formato Estndar String Parseo Numrico Input/Output Lectura y Escritura de Archivos Serializacin Threading (Hilos)Qu es C#?C# o C Sharp es un lenguaje de programacin que est incluido en la Plataforma .NET y corre en el Lenguaje Comn en Tiempo de Ejecucin (CLR, Common Language Runtime). El primer lenguaje en importancia para el CLR es C#, mucho de lo que soporta la Plataforma .NET est escrito en C#.

C# intenta ser el lenguaje base para escribir aplicaciones .NET

C# deriva de C y C++, es moderno, simple y enteramente orientado a objetos, simplifica y moderniza a C++ en las reas de clases, namespaces, sobrecarga de mtodos y manejo de excepciones. Se elimino la complejidad de C++ para hacerlo ms fcil de utilizar y menos propenso a errores.

Algunas caractersticas de C# son:

C# provee el beneficio de un ambiente elegante y unificado.

No soporta herencia mltiple, solamente elruntime.NET permite la herencia mltiple en la forma de interfaces, las cuales no pueden contener implementacin.

No maneja apuntadores, para emular la funcin de los apuntadores se utilizadelegatesel cual provee las bases para el .NET event model.

Por default trabaja con cdigo administrado.

La Plataforma .NET provee un colector de basura que es responsable de administrar la memoria en los programas C#.

El manejo de errores est basado en excepciones.

Soporta los conceptos como encapsulacin, herencia y polimorfismo de la programacin orientada a objetos.

El Modelo completo de clases est construido en la cima del .NET Virtual Object System (VOS). El modelo de objetos es parte de la infraestructura y ya no forma parte del lenguaje de progrmacin.

No existen funciones globales, variables o constantes. Todo deber ser encapsulado dentro de la clase, como un miembro de la instancia (accesible via una instancia de clase) o un miembro esttico (via el tipo).

Los mtodos que se definen en las clases son por default no virtuales (no pueden ser sobre escritos al derivar clases)

Soporta los modificadores de accesoprivate,protected,publicy agrega un cuarto modificadorinternal.

Solamente se permite una base clase, si se requiere herencia mltiple es posible implementar intefaces.

No es posible utilizar variables no inicializadas.

No es posible hacer el cast de un entero a un tipo de referencia (objeto).

Los parmetros que son pasados son type-safe.

El soporte de versiones lo provee el CLR.

Permite acceder a diferentes APIs a travs de .NET Common Language Specification, el cual define el estdar de interoperabilidad entre lenguajes que se adhieran a este estndar.

La Plataforma .NET provee un acceso transparente a COM.

Soporta OLE

Permite la interoperabilidad con APIs al estilo C y DLLs, esta caracterstica para acceder a APIs nativas es llamada Platform Invocation Services (PInvoke)

Por default el cdigo es safe mode, pero es posible declarar clases o slo mtodos unsafe, esta declaracin permite utilizar apuntadores, estructuras y almacenamiento de arreglos estticos.

C# depende del runtime que provee la Plataforma .NET, el runtime administra la ejecucin de cdigo.

Lenguaje Orientado a ObjetosSegnBjarne Stroustrupautor del lenguaje de programacin C++, para que un lenguaje sea llamado Orientado a Objetos debe soportar tres conceptos:objetos,clasesyherencia.

Aunque los lenguajes orientados a objetos se construyen sobre los conceptos de :

Encapsulacin Herencia PolimorfismoObjetoUnObjetoes una instancia de un tipo de clase.

Lainstanciacines el acto de crear una instancia de un objeto, la instancia es un objeto, lainstanciacinusa el operadornew, despus lainstanciacines posible comunicarnos con el objeto a travs de sus miembros.

UnObjetoes una coleccin de informacin relacionada y funcional.

Un objeto se compone de:

Datosque describen el objeto y

Operacionesque pueden ser realizadas por el objeto

HerenciaLaHerenciaes la habilidad para heredar datos y funcionalidad de un objeto padre, la herencia es una caracterstica fundamental de un sistema orientado a objetos.

A travs de la herencia es posible crear o derivar una nueva clase basada en una clase existente.

Una clase derivada es la nueva clase que esta siendo creada y la clase base es una de las cuales la nueva clase es derivada. La nueva clase derivada hereda todos los miembros de la clase base por consiguiente permite reusar el trabajo previo.

En C# se puede asumir que la clase derivada podra heredar todos los miembros de la clase base.

La herencia es un ejemplo del diseo orientado a objetos conocido como una relacin "is-a" (es-un), por ejemplo:

"un empleadoes unapersona".

Al utilizar la herencia la clase base necesita ser diseada teniendo en mente la herencia, si los objetos no tienen la estructura apropiada la herencia no podra funcionar correctamente.

Una clase derivada no debera requerir ms ni prometer menos que su clase base sobre cualquiera de sus interfaces heredadas.

Una interfaz de clase es un contrato entre esta y los programadores que usan la clase.

upcasting, cuando un programador tiene una referencia a la clase derivada, el programador siempre puede tratar a esa clase como si fuera la clase base.

En el lenguaje comn en tiempo de ejecucin .NET todos los objetos heredan de la ltima clase base llamadaobjecty existe slo una herencia simple de objetos.

Un objeto puede derivar slo de una clase base.

ClaseUnaClasees una plantilla para un objeto.

UnaClasedefine las operaciones que un objeto puede realizar y define un valor que mantiene el estado del objeto, los componentes principales de una clase son: mtodos, eventos y propiedades.

Una instancia de una clase es un objeto, se accede a la funcionalidad de un objeto invocando sus mtodos y accediendo a sus propiedades, eventos y campos.

Una clase utilizamodificadorespara especificar la accesibilidad de la clase y sus componentes, los componentes de una clase son llamados miembros por lo que existen diferentes tipos de miembros. Una referencia se refiere a una instancia, una instancia es la creacin de un objeto del tipoclase que se est declarando. Una clase utiliza ninguno, uno o msconstructorespara ayudar a definir la instancia de una clase. Existe una palabra reservada llamadathisque sirve para hacer referencia a la clase actual en el mbito en el cual es utilizada. Cuando se hace referencia a una variable de instancia que tiene el mismo nombre de un parmetro se debe utilizarthis.name.

Al crear y manipular objetos no es necesario administrar la memoria que estos ocupan ya que existe un mecanismo que se encarga de esto llamadogarbage collector(recolector de basura), pero es una buena prctica no olvidar liberar los recursos.

Funciones MiembroUnaFuncin Miembropuede ser unconstructor, es decir, una pieza de cdigo que es invocada en una instancia del objeto.

Campos EstticosUnMiembro Estticodefinine miembros de un objeto que no son asociados con una instancia de clase especfica.

UnCampo Estticoes el tipo ms simple de un miembro esttico, para declarar uncampo estticose utiliza el modificadorstatic.

Uncampo estticopuede accederse a travs del nombre de la clase, en vez de la instancia de la clase (objeto):

using System;

class MiContador{

//Campo Esttico

public static int iContador = 0;

public MiContador(){

iContador++;

}

}

class App{

public static void Main(){

MiContador ContadorA = new MiContador();

Console.WriteLine(MiContador.iContador);

MiContador ContadorB = new MiContador();

Console.WriteLine(MiContador.iContador);

}

}

El ejemplo determina cuantas instancias del objeto han sido creadas.

Clase BaseUnaClase basees un objeto padre de donde se basa un nuevo trabajo.

Clase DerivadaUnaClase derivadaes un objeto hijo.

Clase AbstractaUnaClase Abstractadefine las funciones que una clase derivada debe implementar.

UnaClase Abstractadefine un contrato en donde las clases derivadas deben definir las funciones que la clase padre marca utilizando la palabra reservadaabstract, adems que la clase padre tambin se define comoabstract.

using System;

abstract public class Persona{//Indica que la clase es abstracta

//Propiedades

public string sNombre;

public int iEdad;

//Constructor

public Persona(string sNombre, int iEdad){

this.sNombre = sNombre;

this.iEdad = iEdad;

}

//Mtodos

abstract public string Tipo();//Mtodo que la clase derivada debe implementar

}

//Herencia Simple

public class Empleado : Persona{

public Empleado(string sNombre, int iEdad):base(sNombre, iEdad){}

override public string Tipo(){

return "Empleado";

}

}

class App{

//Aplicacin

public static void Main(){

Console.WriteLine("--- Arreglo de Objetos ---");

Empleado[] aProgramadores = new Empleado[2];

aProgramadores[0] = new Empleado("Bill Gates", 50);

aProgramadores[1] = new Empleado("Eric S. Raymond", 60);

for(int i = 0; i < aProgramadores.Length; i++){

Console.WriteLine("aProgramadores["+i+"].sNombre : " + aProgramadores[i].sNombre);

Console.WriteLine("aProgramadores[" + i + "].iEdad : " + aProgramadores[i].iEdad);

Console.WriteLine("aProgramadores[" + i + "].Tipo : " + aProgramadores[i].Tipo());

}

}

}

Clase SealedUnaClasesealedse utiliza para prevenir que una clase sea utilizada como una clase base, su principal uso es para prevenir la derivacin no planeada.

sealed class ClaseBase{

ClaseBase(){}

}

class ClaseDerivada : ClaseBase{

}

class Sellada{

public static void Main(){

ClaseDerivada CD = new ClaseDerivada();

}

}

Al compilar el cdigo se muestra el siguiente mensaje:

sealed.cs(4,7): error CS0509: 'ClaseDerivada' : cannot inherit from sealed class 'ClaseBase'

sealed.cs(1,14): (Location of symbol related to previous error)El error es porqueClaseDerivadano puede utilizarClaseBasecomo una clase base porqueClaseBaseessealed, es decir, no permite derivaciones.

Overloading/SobrecargaLaSobrecarga(Overloading) hace posible utilizar dos o ms clases con el mismo nombre, pero con parmetros diferentes. La sobrecarga es comn especialmente para losconstructorespara definir diferentes maneras de crear una instancia nueva.

Cuando una funcin sobrecargada es invocada el compilador selecciona la funcin apropiada que coincide con los parmetros.

Herencia SimpleLaHerencia Simplepermite derivar una clase en una clase nueva, que contiene la definicin de la clase de la cual deriva, es decir, hereda todos los miembros datos de la clase, aunque pueden existir miembros a los cuales no se pueda tener acceso por serprivate.

Los constructores no pueden ser heredados, por lo que es necesario escribir constructores y si funcionalmente no existe alguna modificacin se invoca el constructor de la clase que hereda utilizando la sintaxisbase. Si se omite el constructor de la clase base y es invocado el compilador podra invocar el constructor de la clase base sin parmetros.

using System;

public class Persona{

//Propiedades

public string sNombre;

public int iEdad;

private double dSueldo;

//Constructor

public Persona(string sNombre, int iEdad){

this.sNombre = sNombre;

this.iEdad = iEdad;

}

//Mtodos

public string Tipo(){

return "Persona";

}

public void AsignarSueldo(double dSueldo){

this.dSueldo = dSueldo;

}

public double ObtenerSueldo(){

return this.dSueldo;

}

}

//Herencia Simple

public class Empleado : Persona{

public Empleado(string sNombre, int iEdad):base(sNombre, iEdad){}

public new string Tipo(){

return "Empleado";

}

double dSueldo;

public new void AsignarSueldo(double dSueldo){

this.dSueldo = dSueldo * dSueldo;

}

public new double ObtenerSueldo(){

return this.dSueldo;

}

}

class App{

//Aplicacin

public static void Main(){

Persona Mexicano = new Persona("Gerado ngeles Nava", 33);

Console.WriteLine("Mexicano.sNombre : " + Mexicano.sNombre);

Console.WriteLine("Mexicano.iEdad : " + Mexicano.iEdad);

double dSueldo = 123.456;

Mexicano.AsignarSueldo(dSueldo);

Console.WriteLine("Mexicano.iSueldo : " + Mexicano.ObtenerSueldo());

Console.WriteLine("Mexicano.Tipo : " + Mexicano.Tipo());

Console.WriteLine("--- Herencia Simple ---");

Empleado Programador = new Empleado("Carlos Salinas G.", 53);

Console.WriteLine("Programador.sNombre : " + Programador.sNombre);

Console.WriteLine("Programador.iEdad : " + Programador.iEdad);

Programador.AsignarSueldo(dSueldo);

Console.WriteLine("Programador.iSueldo : " + Programador.ObtenerSueldo());

Console.WriteLine("Programador.Tipo : " + Programador.Tipo());

}

}

Polimorfismo y Funciones VirtualesEl polimorfismo es la funcionalidad que permite a cdigo antiguo invocar cdigo nuevo, tambin permite extender el sistema sin modificar el cdigo existente, esto se logra sobreescribiendo o redefiniendo el cdigo, para lo cual se utilizan funciones virtuales y la palabra claveoverride.

Las funciones abstractas son automaticamente funciones virtuales, las cuales permiten al programador usar polimorfismo para hacer su cdigo simple.

Virtualsignifica que cuando una invocacin a funciones miembro, el compilador debera buscar por el tipo real del objeto y no por el tipo de la referencia, e invocar en base al tipo la funcin apropiada.

using System;

public class Persona{

//Propiedades

public string sNombre;

public int iEdad;

//Constructor

public Persona(string sNombre, int iEdad){

this.sNombre = sNombre;

this.iEdad = iEdad;

}

//Mtodos

virtual public string Tipo(){

return "Persona";

}

}

//Herencia Simple

public class Empleado : Persona{

public Empleado(string sNombre, int iEdad):base(sNombre, iEdad){}

override public string Tipo(){

return "Empleado";

}

}

class App{

//Aplicacin

public static void Main(){

Persona Mexicano = new Persona("Gerado ngeles Nava", 33);

Console.WriteLine("Mexicano.sNombre : " + Mexicano.sNombre);

Console.WriteLine("Mexicano.iEdad : " + Mexicano.iEdad);

Console.WriteLine("Mexicano.Tipo : " + Mexicano.Tipo());

Console.WriteLine("--- Arreglo de Objetos ---");

Empleado[] aProgramadores = new Empleado[2];

aProgramadores[0] = new Empleado("Bill Gates", 50);

aProgramadores[1] = new Empleado("Eric S. Raymond", 60);

for(int i = 0; i < aProgramadores.Length; i++){

Console.WriteLine("aProgramadores["+i+"].sNombre : " + aProgramadores[i].sNombre);

Console.WriteLine("aProgramadores[" + i + "].iEdad : " + aProgramadores[i].iEdad);

Console.WriteLine("aProgramadores[" + i + "].Tipo : " + aProgramadores[i].Tipo());

}

}

}

Cuando una funcin es declarada con la palabra reservadaoverridesignifica que es la misma funcin que fue declarada en laclase base, si la palabra reservadaoverridese omite el compilador podra asumir que la funcin no est relacionada a la funcin de laclase basey no despacha la funcin virtual (el compilador podra sugerir omitiroverrideo agregarnew) .

Cuando existe una funcin virtual el programador puede pasar una referencia a la clase abstracta aunque la clase derivada y el compilador podran escribir cdigo para invocar la versin apropiada de la funcin en tiempo de ejecucin.

Por ejemplo, el objeto baseobjecttiene una funcin virtual llamadaToString()que convierte un objeto a string. Si se invoca la funcinToString()en un objeto que que no la tiene como versin propia, la versin de la funcin que es parte de la claseobjectpodra ser invocada.

Encapsulacin y VisibilidadEncapsulacin(tambin llamadainformation hiding), habilidad de un objeto para ocultar sus datos internos o parte interna de sus usuarios y provee una interface que hace las partes importantes del objeto accesible programaticamente.

La encapsulacin provee los lmites entre una interfaz externa y los detalles de su implementacin interna.

Al disear objetos el programador decide que objetos son visibles al usuario y que es privado dentro del objeto, los detalles que no son visibles al usuario son sealados para ser encapsulados en la clase.

Razones para encapsular y ocultar:

El usuario no puede cambiar lo que es privado en el objeto, lo cual reduce la oportunidad de que el usuario cambie o dependa de los detalles en el cdigo, si el usuario hace lode detalles dependientes, los cambios realizados en el objeto quiz arruinen el cdigo del usuario.

Los cambios realizados en partes pblicas de un objeto deben permanecer compatibles con la versin previa. Las partes pblicas pueden ser cambiadas sin arruinar el cdigo del usuario.

Los campos privados pueden slo ser accesados desde la clase, los campos pblicos pueden ser accesados a travs de cualquier instancia de la clase.

AbstraccinUnaAbstraccinse refiere a como un problema dado es representado en el espacio de programa.

Como desarrollador de clases es necesario pensar en terminos de hacer el mejor diseo de abstraccin para los clientes de clase y permitirles enfocarse a la tarea que deben realizar y no escudriar o indagar en los detalles de como funciona la clase, tambin es necesario determinar cuales de los miembros de la clase deberan ser accesibles publicamente.

Los beneficios de una buena abstraccin, es disearla de manera tal que las modificaciones son minimas, si se conoce bien el problema a resolver facilita determinar que mtodos necesitara el usuario, tambin ser un sistema fcil de entender y mantener.

La interfaz de clase es la implementacin de la abstraccin.

Plataforma .NETLa solucin Microsoft .NET comprende cuatro componentes fundamentales:

Servicios de Bloques de Construccin .NETo acceso programtico para ciertos servicios tales como almacenamiento de archivos, calendario y pasaporte .NET el cual es un servicio de verificacin de identidad.

Dispositivos de Software .NETel cual podra correr sobre nuevos dispositivos Internet.

La Experiencia de Usuario .NETla cual incluye caractersticas tales como interfaz natural, agentes de informacin y etiquetas inteligentes es decir una tecnologa que automatiza hiperligas para informacin relacionada a palabras y frases en documentos creados por el usuario.

La Infraestructura .NETla cual comprende la plataforma .NET, Microsoft Studio .NET, los Servidores Corporativos .NET y Microsoft Windows .NET

La Infraestructura .NET se refiere a todas las tecnologas que constituyen el nuevo ambiente para crear y ejecutar aplicaciones robustas, escalables y distribuidas. La parte de .NET que permite desarrollar estas aplicaciones es la plataforma .NET.

La Plataforma .NET consiste de un Lenguaje Comn en Tiempo de Ejecucin (CLR) y la Biblioteca de Clases de la Plataforma .NET algunas veces llamada la Biblioteca de Clases Base (CBL).

El CLR es como una mquina virtual (el cdigo que corre dentro del CLR en ejecucin en un ambiente encapsulado y controlado, separados de otros procesos en la mquina) en la cual funcionan las aplicaciones .NET, todos los lenguajes .NET tienen la biblioteca de clases de la Plataforma .NET a su disposicin.

La biblioteca de clases de la Plataforma .NET incluyen soporte para cualquiera de los archivos de entrada/salida y base de datos de entrada/salida para XML y SOAP.

La Plataforma .NET es una plataforma nueva que simplifica la aplicacin del desarrollo en ambientes altamente distribuidos de Internet. La Plataforma .NET est diseada para cumplir los siguientes objetivos:

Proveer un ambiente consistente de programacin orientada a objetos, tanto o si el cdigo objeto es almacenado y ejecutado localmente, o si es ejecutado localmente pero distribuido en Internet o si es ejecutado remotamente.

Proveer un ambiente de ejecucin de cdigo que minimice la distribucin de software y conflictos de versiones.

Proveer un ambiente de ejecucin de cdigo que garantice la ejecucin de cdigo seguro, incluyendo el cdigo creado por un desconocido o un tercero semiconfiable.

Proveer un ambiente de ejecucin de cdigo que elimine los problemas de desempeo de ambientes de scripts o interpretes.

Hacer que la experiencia del desarrollador sea consistente a travs de una amplia variedad de aplicaciones, tal como aplicaciones basadas en Windows y aplicaciones basadas en Web.

Construir toda la comunicacin sobre estndares industriales para asegurar que el cdigo basado en la Plataforma .NET pueda integrarse con cualquier otro cdigo.

La Plataforma .NET consiste de dos componentes principales:

El Lenguaje Comn en Tiempo de Ejecucin(CLR) el cual es el fundamento de la Plataforma .NET

La Biblioteca de Clases de la Plataforma .NET, es una coleccin orientada a objetos de tipos reusables que pueden utilizarse para desarrollar aplicaciones en el rango de aplicaciones tradicionales desde la lnea de comandos o interfaces de usuario grficas (GUI) hasta aplicaciones basadas en las ltimas inovaciones que provee ASP.NET tales como Web Forms y servicios web XML.

El runtime es una agente que administra el cdigo en tiempo de ejecucin al proveer de serviciones principales como la administracin de memoria, administracin de hilos, tambin implementa tipos estrictos de seguridad y otras formas de verificacin de cdigo que aseguren la seguridad y robustez.

El concepto de administracin de cdigo es principio fundamental del runtime. El cdigo que manipular el runtime es conocido como cdigo administrado, mientras que el cdigo que no ser manipulado por el runtime es conocido como un cdigo no administrado.

La plataforma .NET puede almacenar componentes no administrados que son cargados por el CLR en sus procesos e inicializados por la ejecucin de cdigo administrado de esta manera se crea un ambiente de software que puede explotar tanto caractersitcas de cdigo administrado como las del cdigo no administrado.

.NET Common Language Runtime - CLREl.NET Common Language Runtime(Lenguage comn en tiempo de ejecucin .NET) es un ambiente basado en componentes y C# esta diseado para facilitar la creacin de componentes. Todos los objetos son escritos como componentes y los componentes son el centro de accin, por ello que reciba el nombre de lenguaje cntrico de componentes (component-centric).

Los componentes creados en C# son totalmente auto-describibles y pueden ser utilizados sin un proceso de registro.

C# ayuda en la creacin de componentes mediante elruntimeyframework.NET, los cuales proveen un sistema de tipo unificado en el cual todo puede ser tratado como un objeto.

Caractersticas del CLREL CLR no slo soporta el compilador de C#, tambin el de Visual Basic y C++, el cdigo que generan estos compiladores para ser soportado por CLR es llamadomanaged code.

Algunos de los beneficios que las aplicaciones obtienen del CLR son:

Integracin de lenguajes a travs delCommon Language Specification Administracin automatica de memoria, a travs del recolector de basura.

Manejo de excepciones de lenguajes.

Seguridadtype safety.

Soporte de versiones.

Modelo Simplificado para la interaccin de componentes.

El CLR provee los beneficios anteriores, el compilador debe emitir losmetadatosen elmanaged code. Losmetadatosdescriben los tipos en el cdigo y son empaquetados en el cdigo ejecutable.

El CLR administra la memoria, ejecucin de hilos, ejecucin de cdigo, verificacin de cdigo seguro, compilacin y otros servicios. Estas caractersticas son intrnsecas a la administracin de cdigo que corre sobre el CLR.

La seguridad y administracin de componentes depende de un nmero de factores que se incluyen en su origen como Internet red corporativa, computadora local, es decir, quiz o quiz no estn disponibles para desempear operaciones de acceso a archivos, acceso a registros o funciones sensitivas, an si comienzan a utilizarse en el misma aplicacin activa.

El runtime forza el acceso a cdigo seguro, no es posible acceder a datos personales, sistema de archivos o red.

El runtime tambin forza la robustez del cdigo implementando una infraestrucutra estricta de verificacin de cdigo llamado Common Type System (CTS), el cual asegura que toda la administracin de cdigo se describe as misma. La variedad de compiladores Microsoft y de terceros genera cdigo administrado que conforma el CTS, es decir, que la administracin de cdigo puede consumir otros tipos e instancias administradas, mientras que se forza estrictamente la fidelidad de tipo y seguridad de tipo.

La administracin del ambiente del runtime elimina cuestiones de software comunes, liberando por ejemplo recursos que ya no son utilizados.

El runtime tambin acelera la productividad del desarrollador, no importa el lenguaje que un programador utilice, puede utilizar las ventajas del runtime, biblioteca de clases, y componentes escritos por otros programadores, cualquier compilador que utilice el runtime puede hacer lo mismo,

La interoperabilidad entre cdigo administrado y no administrado permiten a los desarrolladores continuar utilizando componentes COM y DLLs.

El runtime est diseado para incrementar el desempeo, atravs del CLR que provee muchos servicios estndar, el cdigo administrado nunca es interpretado, una caracterstica llamadajust-in-time(JIT) permite compilar todo el cdigo administrado para correr en el lenguaje nativo de la mquina del sistema o de cualquiera que se este ejecutando. El administrador de memoria elimina las posibilidades de fragmentacin de memoria e incrementa la referencia de localidad de memoria para impulsar el incremento del desempeo.

El runtime soporta aplicaciones del lado del servidor como Microsoft SQL Server e Internet Information Services (IIS), esta infraestructura permite utilizar codigo administrado para escribir la lgica del negocio.

.NET Runtime EnvironmentEl Lenguaje Comn en Tiempo de Ejecucin provee los servicios de ejecucin bsica. Las clases base proveen tipos de datos bsicos, clases coleccin y otras clases generales. Las clases base son clases para tratar datos y XML. En la parte superior de la arquitectura las clases exponen servicios web y tratramiento de la intefaz de usuario. Una aplicacin puede hacer invocaciones en cualquier nivel y utilizar clases desde cualquier nivel.

Organizacin .NET Framework:

Servicios WebInterfaz de Usuario

Datos y XML

Clases Base

Lenguaje Comn en Tiempo de Ejecucin

Ambiente/Entorno de EjecucinEl ambiente o entorno provee un modelo de programacin simple, seguro, soporta de herramientas potentes y ayuda con la distribucin, empaquetado y soporte:

Modelo de Programacin Simple, todos los servicios son ofrecidos a travs de un modelo comn que puede ser accedido desde cualquier lenguaje .NET y los servicios pueden ser escritos en cualquier lenguaje .NET, el entorno o ambiente en gran parte es un lenguaje agnstico permitiendo la eleccin de lenguaje, esto hace el cdigo fcil de reusar para el programador y los proveedores de bibliotecas.

En elruntime .NETtodos los errores son reportados via excepciones.

El entorno contiene las Bibliotecas de Clase Base (Base Class Libraries- BCL) las cuales proveen las funciones tradicionales fundadas en bibliotecas en tiempo de ejecucin, la funcionalidad del BCL incluye:

Clases coleccin, tales como consultas, arreglos, pilas y tablashash.

Clases de acceso a bases de datos

Clases IO (input-output)

Clases WinForms, para crear interfaces de usuario

Clases Network

Fuera de la clase base en tiempo de ejecucin, existen muchos otros componentes que controlan la interfaz de usuario (UI) y realizan otras operaciones sofisticadas.

Seguridad, el entorno delruntime .NETest diseado para ser un entorno seguro. Elruntime .NETes un entorno administrado o controlado, lo cual significa que elruntimeadministra la memoria por el programador a travs del recolector de basura.

Elruntime .NETes un entorno verificado, en tiempo de ejecucin el entorno verifica que la ejecucin del cdigo sea de tipo segura (type-safe).

El sistema de seguridad interactua con el verificador para asegurar que el cdigo realice slo lo que tiene permitido hacer, esto es posible especificando un requerimiento de seguridad para una pieza de cdigo especfica.

Soporte de herramientas potentes, Microsoft suministra cuatro lenguajes .NET: VB, VC++, C# y JScript. La depuracin en gran medida es enriquecida por elruntime .NET, el modelo de ejecucin comn hace la depuracin de lenguajes simple y directa.

Distribucin, empaquetado y soporte, Elruntime .NETayuda simplificando la distribucin y en algunos casos no existe el paso tradicional de instalacin, porque los paquetes son distribuidos en un formato genrico, un paquete puede correr en cualquier entorno que soporte .NET, el entorno separa los componentes de una aplicacin por lo que una aplicacin slo corre con los componentes que son enviados.

EnsamblajeEn elruntime .NETel mecanismo de empaquetado es el ensamble (assembly), cuando el cdigo es compilado por uno de los compiladores .NET, es convertido a una forma intermedia conocida comoIL.

Elensamblecontiene todos losIL,metadatosy otros archivos requeridos para que un paquete se ejecute en un paquete completo.

Cada ensamble contiene un manifiesto que enumera todos los archivos que estn contenidos en el ensamble, controla que tipos y recursos son expuestos fuera del ensamble y relaciona las referencias de esos tipos y recursos a los archivos que contienen los tipos y recursos.

El manifiesto tambin lista otros ensambles que dependen de un ensamble.

Los ensambles se contienen a s mismo, existe suficiente informacin en el ensamble para ser auto-descrito.

Cuando se define un ensamble, el ensamble puede ser contenido en un solo archivo o puede ser dividido entre varios archivos. Utilizando varios archivos podra hacer posible un escenario donde las secciones del ensamble sean descargadas slo como se necesiten.

Interoperabilidad de LenguajeUna de las metas delruntime .NETes ser un lenguaje agnstico, permitiendo que el cdigo sea utilizado y escrito desde cualquier lenguaje, no slo las clases pueden ser escritas en algn lenguaje .NET como VB.NET y ser invocadas desde otro lenguaje .NET como C#, una clase que fu escrita en VB.NET puede ser utilizada como una clase base escrita en C# y esa clase podra ser utilizada desde una clase VC++ o JScript, es decir, no importaria en que clase sea escrita una clase.

Para hacer lo anterior posible existen algunos obstaculos como las propias caractersticas del lenguaje, ya que un lenguaje no podra soportar ciertas cosas que otro si las soporte, por ejemplo la sobrecarga de operadores.

Para que una clase sea utilizada desde un lenguaje .NET, la clase debe adherir laEspecificacin Comn de Lenguaje(Common Language Specification - CLS) la cual describe que caractersticas pueden ser visibles en la interfaz pblica de la clase, por ejemplo elCLSprohibe exponer tipos de datos sin signo, porque no todos los lenguajes pueden utilizarlos.

AtributosElruntime .NETsoporta atributos personalizables, los cuales son en cierto sentido un lugar para colocar informacin descriptiva en losmetadatosjunto con un objeto y entonces recuper despus los datos. Losatributosproveen un mecanismo general para hacer esto y son utilizados en exceso en todo el tiempo de ejecucin para almacenar informacin que modifica como elruntimeutiliza las clases.

Los atributos son extensibles y permite a los programadores definir atributos y utilizarlos.

Los atributos se especifican encerrandolos entre corchetes:

[Version("14/09/2005", Comentario="1.0.1.0")]Losatributosson anotaciones que se colocan en elementos de cdigo fuente, comoclases,miembros,parmetros, etc.

Los atributos puede ser utilizados para: cambiar el comportamiento delruntime, proveer informacin acerca de un objeto, llevar informacin organizacional al diseador.

El atributo informacin es almacenado con losmetadatosdel elemento y pueden ser facilmente recuperados en tiempo de ejecucin a travs de un proceso conocido comoreflection.

C# utiliza unAtributo Condicionalpara controlar cuando las funciones miembro son invocadas.

Por convencin los atributos se agregan al final del nombre de una clase, con la finalidad de conocer cuales son clases atributo y cuales son clases normales. Todos los atributos derivan deSystem.Attribute.

Procure que el atributo para el elemento sea especfico, utilizando los identificadores siguientes:

IdentificadorDescripcin

assemblyensamble

modulemdulo

typeclase o estructura

methodmtodo

propertyporpiedad

eventevento

fieldcampo

paramparmetro

returnvalor de regreso

Los atributos que son aplicados a ensambles o mdulos deben colocarse despus de cualquier clusulausingy antes de cualquier cdigo.

Biblioteca de Clases de la Plataforma .NETLa Biblioteca de Clases de la Plataforma .NET es una coleccin de tipos reutilizables integradas en el CLR.

Los tipos de la Plataforma .NET permiten llevar a cabo tareas de programacin comunes como manipulacin de strings, colecciones de datos, conectividad a bases de datos y acceso a archivos.

Es posible utilizar la Plataforma .NET para desarrollar los siguientes tipos de aplicaciones y servicios:

Aplicaciones de consola

Windows Forms

Aplicaciones ASP.NET

Servicios Web XML

Servicios Windows

Requerimientos de SoftwareTodo lo que se necesita para desarrollar en C# es el Kit de desarrollo (SDK), del cual solo se utilizar el CLR y el compilador de C#.

Lenguaje Intermedio y MetadatosMicrosoft desarrollo un lenguaje parecido al lenguaje ensamblador llamadoMicrosoft Intermediate Language(MSIL).

Para compilar aplicaciones .NET, los compiladores toman el cdigo fuente como entrada y producen MSIL como salida.

MSIL en s es un lenguaje completo con el cual es posible escribir aplicaciones.

El managed code generado por el compilador C# no es cdigo nativo porque es un cdigo de Lenguaje Intermedio (IL). Este cdigo IL se convierte en la entrada para la administracin del proceso de ejecucin del CLR. La ventaja final del cdigo IL es que el CPU es independiente, lo cual significa que se necesita un compilador en la mquina destino para cambiar el cdigo IL en el cdigo nativo.

El IL es generado por el compilador, pero no es lo nico que se provee para el runtime, el compilador tambin genera metadatos acerca del cdigo, los cuales dicen ms al runtime del cdigo, por ejemplo la definicin de cada tipo. Los metadatos son bibliotecas de tipo, entrada de datos al registry, etc. Los metadatos son empaquetados directamente con el cdigo ejecutable y no en localidades separadas.

El IL y los metadatos son colocados en los archivos que extienden el formato PE (Portable Executable) utilizado para archivos .exe y .dll, cuando se carga el archivo PE el runtime coloca y extrae los metadatos y el IL de estos.

Cuando se compila una aplicacin C# o cualquier aplicacin escrita en unCLS, la aplicacin es compilada dentro del MSIL, adems se compila dentro de las instrucciones nativas de CPU cuando la aplicacin es ejecutada por vez primera por elCLR.

El proceso es el siguiente:

Cdigo fuente escrito en C#

El cdigo fuente es compilado usando el compilador de C# (csc.exe) dentro de un EXE.

El compilador C# produce como salida el cdigo MSIL y un manifiesto en una parte de slo lectura del EXE que tiene un encabezado estndar PE (Win32-Portable Executable).

Cuando el compilador produce o crea la salida tambin importa una funcin llamada_CorExeMaindel runtime .NET.

Cuando la aplicacin es ejecutada, el sistema operativo carga el PE como una DLL dependiente tal como la nica que exporta la funcin_CorExeMain(mscoree.dll) justo como lo hace con cualquier PE vlido.

El sistema operativo carga y entonces salta al punto dentro del PE el cual es puesto ah por el compilador C#.

El sistema operativo obviamente no puede ejecutar el cdigo MSIL, el punto de entrada es un pequea parte que salta a la funcin_CorExeMainen mscoree.dll.

La funcin_CorExeMaincomienza la ejecucin del cdigo MSIL que fue colocado en el PE.

Dado que el cdigo MSIL no puede ser ejecutado directamente (porque no est un un formato de mquina ejecutable) elCLRcompila el MSIL usando un compilador just-in-time (JIT o JITter) dentro de instrucciones CPU nativas tal como procesa el MSIL.

JITersEl managed code generado por C# es el cdigo IL, aunque el cdigo IL es empaquetado en un formato de archivo PE vlido, no es posible ejecutarlo sin convertirlo a un managed code nativo.

Cuando un tipo es cargado, el laoder crea y agrega unstub(pieza pequea) a cada mtodo del tipo, as cuando el mtodo es invocado por vez primera, el stub pasa el control al JIT.

El JIT compila el IL a cdigo nativo y cambia el stub para que apunte al cdigo nativo que est en cache, as las subsecuentes invocaciones podran ejecutar el cdigo nativo.

El CLR incluye tres diferentes JITers que pueden ser usados para convertir MSIL en cdigo nativo, dependiendo de las circunstancias:

PreJIT(Generacin de cdigo Install-time), opera como un compilador tradicional, aunque est basado sobre el compilador JIT principal, se ejecuta cuando un componente NGWS es intalado y compila el cdigo IL a managed code nativo.

La generacin de cdigo en tiempo de instalacin compilar un ensamble completo dentro de un cdigo binario de CPU-especifico, tal como lo hace el compilador C++. Un ensamble el cdigo empaquetado que es enviado al compilador. La compilacin se hace en tiempo de instalacin, cuando el usuario final es menos probable para notificar que el ensamble esta siendo compilado-JIT.

La ventaja de la generacin de cdigo en tiempo de instalacin, es que permite compilar el ensamble completo justo una vez antes de ser ejecutado. Al ser compilado el ensamble entero no hay preocupacin referente al desempeo intermitente cada vez que un mtodo en el cdigo es ejecutado por primera vez.

Al usar esta utilidad depende del tamao del sistema y del ambiente de distribucin.

JIT, compilador por default utilizado por el CLR, es un compilador optimizado, el cual realiza el anlisis del flujo de datos, administra el cdigo nativo como salida.

El JITter es invocado en tiempo de ejecucin.

EconoJIT, realiza una conversin muy veloz del IL a managed code nativo

Tambin es un JITter en tiempo de ejecucin, esta especialmente diseado para sistemas que tienen recursos limitados como memoria. La principal diferencia con un JIIter regular es la incorporacin de algunas invocacionescode pitching, que permiten al EconoJIT descartar el cdigo generado o compilado si el sistema comienza a ejecutarse fuera de memoria, siendo el beneficio el reclamo de memoria. La desventaja es que si el cdigo espitched(lanzado) es invocado otra vez por lo que debe ser compilado de nuevo.

Es posible determinar que tipo de JIT esta siendo utilizado y cuanta memoria utiliza a travs de una pequea utilidad llamadaJIT Compiler Manager(jitman.exe), que reside en el directoriobindel directorio de instalacin del NGWS SDK.

Sistema de Tipo UnificadoEl runtime de .NET hace ms que dar al desarrollador un simple sistema de tipo unificado que es usado a travs de todos los lenguajes, tambin deja a los lenguajes escribir extensiones de sistema tipo, agregando nuevos tipos que parezcan y actuen como tipos de sistemas built.in.

El Sistema Virtual de Objetos - VOSLas reglas que se siguen cuando se declaran, utilizan y administran tipos son modeladas en el Sistema Virtual de Objetos (Virtual Object System- VOS).

El VOS establece una plataforma que permite la integracin de lenguajes y type safety.

La base de la arquitectura del runtime es la plataforma que puede describir en cuatro reas:

VOS Type System, provee un sistema de tipos que intenta soportar la implementacin completa de una rango amplio de lenguajes de programacin.

Metadata, describe y hace referencia a los tipos definidos por el VOS.

Common Language Specification - CLS, define el subconjunto de tipos del VOS. Si una biblioteca de clases es soportada por las reglas del CLS, garantiza que la biblioteca de clases pueda ser utilizada por los dems lenguajes que implementen el CLS.

Virtual Execution System - VES, es responsable de la carga y ejecucin de los programas que fueron escritos por el CLR.

VOS Type SystemEl VOS define tipos que describen valores y especifican un contrato en donde todos los valores de tipo deben soportar. Existen dos entidades: valores y objetos.

Para un valor el tipo describe la representacin de almacenamiento y las operaciones que puede realizar.

Los objetos son ms poderosos porque el tipo es almacenado explicitamente en su representacin, cada objeto tiene una identidad que lo distingue de los dems objetos.

MetadataEl compilador CLS toma el cdigo fuente como entrada y produce cdigo MSIL para el runtime para compilar a travs de los JITters y ejecutar. Adems se mapea el cdigo fuente a secuencias de instrucciones MSIL, el compilador CLS tiene otra tarea importante: envolver metadatos dentro del EXE resultante.

LosMetadatosson datos que describen datos.

Los metadatos son la coleccin de elementos programticos que constituyen el EXE, como los tipos declarados y los mtodos implementados.

Estos metadatos son similares a los tipos de bibliotecas generadas con componentes COM (Component Object Model).

La razn para usar metadatos es simple ya que permiten al runtime .NET conocer en tiempo de ejecucin que tipos podran ser almacenados y que mtodos podran ser invocados. Esto permite al runtime configurar apropiadamente el ambiente para mayor eficiencia al ejecutar la aplicacin. El significado por el cual estos metadatos son consultados es llamadoreflection.

Los metadatos por cada objeto .NET registran toda la informacin que es requerida para usar el objeto, con esta informacin elruntime .NETes capaz de resolver como crear objetos, invocar funciones miembro o acceder a los datos de un objeto y el compilador puede utilizar la informacin para encontrar que objetos estn disponibles y como es utilizado un objeto. La informacin incluye lo siguiente:

El nombre del objeto

Los nombres de todos los campos del objeto y sus tipos

Los nombres de todas las funciones miembro, incluyendo tipos parmetro y nombres

Los metadatos tambin permiten a otras herramientas acceder a la informacin detallada acerca del cdigo

Existe un proceso llamadoreflectiondonde el cdigo en tiempo de ejecucin puede consultar los metadatos para encontrar que objetos estn disponibles y que funciones y campos estn presentes en la clase. Lareflectionest disponible para usuarios finales para determinar como son los objetos, bsqueda de atributos o ejecutar mtodos en los que los nombres no son conocidos hasta el tiempo de ejecucin.

Los metadatos son utilizados para varias tareas:

Para representar la informacin que el CLR utiliza para localizar y cargar clases.

Para sacar las instancias de las clases en memoria.

Para resolver la invocacin de mtodos.

Para traducir IL a cdigo nativo.

Para forzar la seguridad.

El encargado de generar los metadatos es el compilador C#, al pasar el cdigo a IL, emitiendo la informacin binaria de los metadatos en un archivo PE.

La principal ventaja de la combinacin de los metadatos con el cdigo ejecutable es que la informacin acerca de los tipos es persistente.

Una herramienta que toma ventaja dereflectiones el ILDASM (Microsoft .NET Framework IL Disassembler), el cual analiza la aplicacin de metadatos fuente y entonces presenta informacin acerca de la aplicacin en la jerarqua del rbol.

SeguridadLa faceta ms importante de cualquier ambiente de desarrollo de aplicaciones distribuidas es como manejar la seguridad.

La seguridad comienza tan pronto como una clase es caragada por el CLR porque la clase loader es parte del esquema de seguridad .NET, la seguridad relacionada a factores tales como reglas de accesibilidad y requerimientos de consistencia son verificados.

DeploymentLa llave para el Deployment de aplicaciones .NET es el concepto de (ensambles). Los assemblies son paquetes simples de comportamiento semanticamente relacionados que son construidos como un archivo individual o entidades de archivos mltiples.

La especificacin de como deploy una aplicacin podra variar ya que se puede tratar de un desarrollo web o aplicacin tradicional de escritorio.

El runtime .NET mantiene el rastreo delos archivos y de las versiones de los archivos asociados con una aplicacin. Cualquier aplicacin que es instalada es automticamente asociada con los archivos que son parte de ese ensamble.

Si una aplicacin de instalacin intenta sobre escribir un archivo necesario para otra aplicacin, el runtime .NET es lo bastante inteligente para permitir que la aplicacin de instalacin, instale los archivos necesarios pero el CLR no elimina las versiones previas de el archivo porque todava son requeridas por la primer aplicacin.

Interoperabilidad con cdigo no administradoEl cdigo no administrado no tiene las ventajas que tiene el cdigo administrado, como recoleccin de basura, sistema de tipo unificado y metadatos.

Cdigo administrado invocando funciones DLL no administradas, cuando la aplicacin necesita una interfaz para una DLL en C y la empresa que escribe la DLL no adopta .NET ser necesario invocar esa DLL desde una aplicacin .NET.

Cdigo administrado usando componentes COM, es posible lograr esto creando un wrapper .NET para el componente COM, as que el cliente administrado trabaja con clases .NET

Cdigo no administrado usando servicios .NET, cuando se desea acceder a .NET desde cdigo no administrado.

Common Language Specification - CLSEs un conjunto de reglas que un lenguaje debe adherir para crear aplicaciones .NET que se ejecutan en el CLR.

Un concepto importante relacionado a la CLR es el cdigo administrado, el cdigo administrado es justo el cdigo que esta ejecutandose bajo el auspicio de la CLR y por consiguiente comienza a ser controlado por el CLR.

El CLS define un subconjunto de tipos del VOS, si una biblioteca de clases sigue las reglas del CLS esta garantizando ser utilizada por clientes de otro lenguaje de programacin que tambin se adhieren a la CLS.

El CLS se refiere a la interoperabilidad entre lenguajes, por lo que es necesario seguir los tipos y caractersticas del CLS, para ello es necesario conocer los tipos primitivos, arreglos, tipos, miembros tipo, mtodos, campos, propiedades, enumeraciones, excepciones, interfaces, eventos, atributos personalizables, delegados, identificadores, etc. que la propia especicicacin define.

Virtual Execution System - VESEl Sistema Virtual de Ejecucin implementa la VOS y se crea implementando un motor de ejecucin (Execution EngineEE). Los componentes de la VES son:

Lenguaje Intermedio(Intermediate Language- IL), diseado para ser facilmente traducido a una amplia gama de lenguajes, por lo que el compilador C# es capaz de generar el lenguaje intermedio.

Carga del Cdigo Administrado(Loading Managed Code), resuelve nombres, obtiene clases de la memoria, crea stubs que son necesarios para la compilacin JIT. Laclass loaderforza la seguridad.

Conversin de IL a Cdigo Nativo via JIT, el cdigo del lenguaje intermedio no esta diseado como un interprete tradicional bytecode o rbol de cdigo, la conversin del lenguaje intermedio es realmente una compilacin.

Carga de Metadatos, se encarga de checar la seguridad de tipos y la integridad de los mtodos.

Recolector de Basura y Manejo de Excepciones(Garbage Collection), el codigo administrado premite rastrear el apilado en el runtime, para que el runtime entienda el apilado individual de frames un cdigo administrado tiene que ser proporcionado por el JITer o por el compilador.

Servicios de debugging, estos servicios dependeran de la informacin producida por el compilador del lenguaje fuente y se emiten dos mapas, un mapa del lenguaje fuente de la construccin de direcciones en el flujo de instrucciones y un mapa de las direcciones de las localidades en el apilado de frames.

Administracin de Hilos, el VES proprorciona este servicio al cdigo administrado.

Tipos de DatosC# soporta el conjunto de tipos de datos usual, para cada tipo de dato que C# soporta, existe una correspondencia tipo de lenguaje comn en tiempo de ejecucin .NET subyacente.

Todos los tiposruntimepueden encontrarse en elnamespaceSystemdel lenguaje comn en tiempo de ejecucin .NET.

TipoBytesTipo runtimeDescripcin

byte1ByteUnsigned byte

sbyte1SByteSigned byte

short2Int16Signed short

ushort2UInt16Unsigned short

int4Int32Signed integer

uint4UInt32Unsigned int

long8Int64Signed big integer

ulong8UInt64Unsigned big integer

float4SingleFloating point number

double8doubleDouble-precision floating point number

decimal8DecimalFixed-precision number

stringStringUnicode string

charCharUnicode character

boolBooleanBoolean value

Los tipos de datos son separados envalue typesyreference types. Losvalue typesson asignados en estructuras de pilas o en lnea. Losreference typesson asignados al aglomerado.

Las referencias y tipos de valores son derivados de la ltima clase baseobjet, de esta manera en caso de que un tipo de valor necesite actuar como unobjectuna envoltura hace que el tipo de valor parezca una referencia asignandolo al aglomerado, y los tipos de valores son copiados a estos. La envoltura es marcada por lo que el sistema conoce que contiene por ejemploint, a este proceso se le conoce comoboxingy el proceso de reversa se le conoce comounboxingLa palabra reservadaclasses empleada para declarar un tipo referencia (heap allocated), y la palabra reservadastructes empleada para declarar un tipo valor, una estructura es utilizada para objetos ligeros que necesitan actuar como tiposbuilt-in, las clases son utilizadas en cualquier otro caso.

Por ejemplo un tipointes unvalor tipoy un tipostringes untipo referencias, esto trabajaria as:

int i = 2005;

string s = "Septiembre";

i2005

so-----

------------>

Septiembre

Constantes y Campos Solo LecturaEn C# los valores pueden ser definidos como constantes y para que un valor sea constante su valor debe ser algo que pueda ser escrito como una constante.

public const string sDominio = "informatique.com.mx";La restriccin de tipos constantes es que son conocibles en tiempo de compilacin, en vez de ello es posible utilizar el modificadorreadonlyel cual est diseado para aquellas situaciones en donde las constantes tienen restriccin.

Aplicando el modificadorreadonlyun valor puede ser establecido en el constructor o en una inicializacin pero no puede ser modificado despus.

Ejemplo Hello World!El cdigo C# puede ser escrito en cualquier editor, tambin puede escribirse con Visual Studio 7.

El cdigo C# debe almacenarse en un archivo con extensin.csPara compilar el cdigo C# es necesario tener instalado la Plataforma .NET que incluye el compilador C#, puede buscar el ejecutable en la ruta:

C:WINDOWSMicrosoft.NETFrameworkv1.1.4322csc.exeAsegurese de tener esta ruta en el path para poder ejecutar el compilador desde cualquier ubicacin.

Para compilar su archivo .cs es necesario abrir la consola (DOS) y escribir el comandocsseguido del nombre de su archivo por ejemplo:

cd helloworld.csLa salida exitosa de la compilacin podra ser as:

Microsoft (R) Visual C# .NET Compiler version 7.10.6001.4

for Microsoft (R) .NET Framework version 1.1.4322

Copyright (C) Microsoft Corporation 2001-2002. All rights reserved.

Si existe algn error el compilador lo notificar. El archivo es compilado y ligado ahelloworld.exe, (el archivo .exe generado tendr el nombre del archivo fuente) para ejecutar el programa slo es necesario escribir el nombre del archivo ejecutable.

Algo interesante es que es posible especificar el nombre del archivo ejecutable a travs de unswitch:

csc /out:nuevoNombre.exe nombreArchivoFuente.cs

El siguiente es el ejemplo tpico de los lenguajes de programacin:

class HelloWorld{

public static void Main(){

System.Console.WriteLine("Hello World");

}

}

El mtodoMaindebe estar contenido en la clase y escrito con la primer letra en mayscula. El tipo de este mtodo puede servoidoint. Tambin este mtodo puede especificar argumentos:

public static void Main(string[] args)

Systemes el mbito del namespace en el cual el objetoConsoleest contenido.

Es posible importar el namespace en las aplicaciones indicandolo al inicio del cdigo con la palabra reservadausingque es una directiva para el namespaceSystem.Existen ms namespaces en la Plataforma .NET

using System;

Ejemplo ArgsExaminemos el siguiente ejemplo, el cual recibe los argumentos con los que el componente fue invocado:

Ejemplo de Args confor:

using System;

class Args{

public static void Main(string[] args){

Console.WriteLine("Argumentos : {0}", args.Length);

for(int itera = 0; itera < args.Length; itera++)

Console.WriteLine("Argumento {0} : {1}", itera, args[itera]);

}

}

Ejemplo de Args conforeach:

using System;

class App{

public static void Main(string[] args){

foreach(string input in args){

Console.WriteLine(input);

}

}

}

using System;, define elnamespaceSystem, el cual contiene entre otras la claseConsolela cual es utilizada para comunicarse con la lnea de comandos.

usingpermite al usuario omitir elnamespaceal utilizar el tipo al que es referenciado en este casoSystem, por lo que en vez de escribir:

System.Console.WriteLine();Solamente se escribe:

Console.WriteLine();usingno puede ser utilizado con un nombre de clase por lo que no es permitido escribirusing System.Console class Args, Al no existir las funciones globales en C#, se declara una clase llamadaArgs.

public static void Main(string[] args), La claseArgscontiene una funcin o mtodoMain(), el cual sirve como punto de partida de la ejecucin del componente, este mtodo puede o no ser declarado con argumentos, en este caso es fundamental declarlos porque deseamos precisamente leer y escribir estos argumentos proporcionados al invocar el componente.

Al ser un mtodo de arranque debe ser declarado con el modificadorstaticporque no est asociado con una instancia de un objeto.

El mtodo indica que recibe un arreglo de tipo string llamadoargs Console.WriteLine("Argumentos : {0}", args.Length);, invoca el mtodoWriteLinede la claseConsolepara escribir en la lnea de comando lo que se indica entre los parntesis.

La primer parte de lo que se encierra entre parntesis es un string donde es necesario destacar que{0}, es una notacin que indica entre llaves un ndice que hace referencia a una variable asociada a este, en este caso asociada conargs.Lengthargs.Length,Lengthes un mtodo de la claseargsel cual obtiene el nmero de elementos que contiene este arreglo.

El cicloforcomienza una iteracin desde0hasta el nmero de elementos que contiene el arregloargs.Length, por cada elemento contenido en el arreglo escribe en la lnea de comandos lo que se indica en("Argumento {0} : {1}", itera, args[itera])que como mencionamos anteriormente{0}hace referencia al orden en que las variables sern escritas, en este caso corresponde al iterador y{1}corresponde aargs[itera], lo cual indica obtener el elemento en cuestin del arregloargs.

Para compilar el componente utilicecsc Args.cs Para ejecutar el componente sin parmetros escriba en la lnea de comando:csc ArgsSalida:Argumentos : 0 Para ejecutar el componente con parmetros escriba en la lnea de comando:

csc Args p1 p2 p3 p4 p5 p6 ... pnPor ejemplo:args http : www . informatique . com . mxSalida:

Argumentos : 8

Argumento 0 : http

Argumento 1 : :

Argumento 2 : www

Argumento 3 : .

Argumento 4 : informatique

Argumento 5 : .

Argumento 6 : com

Argumento 7 : .

Argumento 8 : mx

Ejemplo Input/OutputEs posible leer datos de la consola utilizando el mtodoReadLiney es posible mostrarlos utilizando el mtodoWriteoWriteLinedel objetoConsole:

using System;

class inOut{

public static void Main(){

Console.Write("Fecha de Nacimiento: ");

String strFecNac = Console.ReadLine();

Console.WriteLine("FecNac = " + strFecNac);

}

}

Noteque importar la directivaSystemhace posible omitir escribir el namespace, de esta forma slo es necesario escribir el nombre del objeto seguido del nombre del mtodo.

Ejemplo String FormatEs posible dar formato a la salida de datos a un tipo string, utilizando la sintaxis{nmero}donde nmero es reemplazado por la variable correspondiente:

using System;

class strFormat{

public static void Main(){

Console.Write("Nombre: ");

String strNombre = Console.ReadLine();

Console.Write("Edad: ");

String strEdad = Console.ReadLine();

Console.Write("Telfono: ");

String strTel = Console.ReadLine();

Console.Write("Direccin: ");

String strDir = Console.ReadLine();

Console.WriteLine("Datos: {0} {1} {2} {3}", strNombre

, intEdad, strTel, strDir);

}

}

FuncinMainEs posible incluir una funcin esttica en la clase para poder probarla, en C# esta funcin esttica puede ser escrita comoMain()e indica el inicio de la ejecucin de un programa:

using System;

class App{

public static void Main(){

Console.WriteLine("Hello world!");

}

}

El ejemplo anterior define a la funcinMaincomovoidlo cual indica que no regresa un valor, pero es posible indicar que si regrese un valor escribiendo el tipo de la funcin comointpor ejemplo, que indica que regresa un valor de tipo entero:

using System;

class App{

public static int Main(){

Console.WriteLine("Hello world!");

return(1);

}

}

Tambin es posible que la funcinMainreciba parmetros de la lnea de comandos, para ello es necesario especificar unarreglode strings como parmetro:

using System;

class App{

public static void Main(string[] args){

foreach(string input in args){

Console.WriteLine(input);

}

}

}

Mltiples FuncionesMainEs posible que existan en una aplicacin varias clases que contengan la funcinMain()y por ello al compilar se indicar un error.

Para evitar el error o indicar que funcinMain()de que clase deseamos que se ejecute, es necesario utilizar el siguienteswitchal compilar:

/main:nombreClasePor ejemplo

using System;

class ClaseA{

public static void Main(){

Console.WriteLine("Main de la clase A");

}

}

class ClaseB{

public static void Main(){

Console.WriteLine("Main de la clase B");

}

}

class ClaseC{

public static void Main(){

Console.WriteLine("Main de la clase C");

}

}

Al compilar utilice :csc multiplesmain.cs /main:ClaseBSalida:Main de la clase BPreprocesamientoLo ms importante en este punto es que en C# no existe elpreprocesador, el motivo por el cual no existe es para simplificar la estructura de compilacin adems de que no hay necesidad de escribir un archivo de encabezados por separado y mantener en sincronia la implementacin, cuando los archivos fuente C# son compilados el orden de la compilacin de archivos individuales no es importante y es equivalente a un archivo de gran tamao.

Unidentificadores el nombre que es usado para algn elemento de un programa como una variable o funcin y deben tener una letra o guin bajo como primer caracter.

C# soporta las siguientes directivas de preprocesamiento:

TamaoValor

#defineDefine un identificador, los identificadores tambin pueden ser definidos via la lnea de comando

#undefElimina la definicin de un identificador

#ifEl cdigo de la seccin es compilado si la expresin es verdadera

#elifConstructor Else-if, si la directiva anterior no se cumplio y si la expresin es verdadera el cdigo de la seccin es compilado

#elseSi la directiva anterior no se cumplio el cdigo de la seccin es compilado

#endifMarca el final de la seccin

Los identificadores deben preceder a cualquier cdigo real.

Es posible utilizar los siguientes operadores en expresiones preprocesador:

! == != && ||Es posible utilizar parntesis para agrupar expresiones.

ComentariosEs posible comentar el cdigo, para ello existen dos modalidades:

//, que se utiliza para comentar una lnea, es decir, todo lo que sigue a//es ignorado.

/* */, que se utiliza para comentar segmentos de cdigo.

Value TypesUna variable contiene un valor de cierto tipo, C# forza a inicializar las variables antes de utilizarlas en una operacin.

Cuando se asigna un valor a un value type el valor actual es copiado a diferencia de los reference types lo que se copia es la referencia actual no el valor.

C# agrupa los value types en:

Tipos Simples Tipos Estructura Tipos EnumeracinTipos SimplesLosTipos Simplesde C# comparten caractersticas como las de alias con los tipos de sistema de .NET, expresiones constantes consisten de Tipos Simples evaluados solamente en tiempo de compilacin no en tiempo de ejecucin y los Tipos Simples pueden ser inicializados con literales.

Los Tipos Simples de C# se agrupan en:

IntegralRepresenta valores enteros y existen nueve tiposintegralen C#:

TipoTamaoValor

sbyteEntero con signo8 bit-128 a 127

byteEntero sin signo8 bit0 a 255

shortEntero con signo16 bit-32,768 a 32,767

ushortEntero sin signo16 bit0 a 65,535

intEntero con signo32 bit-2,147,483,648 a 2,147,483,647

uintEntero sin signo32 bit0 a 4,294,967,295

longEntero con signo64 bit-9,223,372,036,854,775,808 a -9,223,372,036,854,775,807

ulongEntero sin signo64 bit0 a 18,446,744,073,709,551,615

BoolRepresenta valores booleanos verdadero y falso, por lo que es posible asignar a una variable un valor booleano o el resultado de una expresin:

bool bContinuar = (a > b);En C# el valor verdadero no es posible representarlo con algn valor diferente de cero, no hay una conversin entre el tipo integral a bool que force esta conversin.

CharRepresenta un caracter Unicode de 16 bit de tamao, por ejemplo:

char cSexo = 'M';Tambin es posible asignar un valor hexadecimal utilizando lasecuencia de escapexo un valor Unicode con lasecuencia de escapeu:

char cHexadecimal = 'x0068';

char cUnicode = 'u0068';

No existen conversiones implicitas dechara otro tipo de datos disponible, esto significa por ejemplo que tratar de convertir una variablechara un tipo de dato integral no es posible en C#, por lo que se tendr que hacer uncastexplicito:

char cCaracter = (char)65;

int nNumero = (int)'A';

Floating PointRepresentan dos tipos de datos, flotantes (float) y dobles (double):

TipoValor

float1.5x10-45a 3.4x1038con una precisin de 7 dgitos

double5.0x10-324a 1.7x10308con una precisin de 15-16 dgitos

Al realizar operaciones conFloating Pointpueden producirse los siguientes valores:

Cero positivo y negativo

Infinito positivo y negativo

NaN,Not-a-NumberNota: Si una expresin un valor es de tipoFloating Pointtodos los otros valores son convertidos a tiposFloating Pointantes de realizar el clculo.

DecimalRepresenta un tipo de alta precisin de 128 bit el cual es posible utilizarlo para calculos financieros y monetarios. Los valores posibles comprenden los rangos 1.0x10-28a 7.9x1028con una precisin de 28 a 29 dgitos.

No hay conversiones implicitas entre decimales y dobles, se podra generar unoverflowo perder precisin, por lo que es necesario una conversin explcita con uncast.

Cuando se define una variable y se le asigna un valor se utiliza el sufijompara denotar que es un valor decimal:

decimal decDecimal = 1.0mSi se omite la letramla variable podra ser tratada comodoublepor el compilador antes de ser asignado.

Tipos EstructuraUn tipostructpuede declarar constructores, constantes, campos, mtodos, propiedades, ndices, operadores y tipos anidados. Las estructuras actuan de manera similar a una clase y con mayores restricciones, por ejemplo no pueden heredar de cualquier otro tipo, ni tampoco otra clase puede heredar de una estructura.

Las estructuras deberan ser utilizadas slo para tipos que son realmente una pieza de datos.

La diferencia entrestructyclassen C# es questructes unvalue typeyclasses unareference type.

La principal idea de utilizarstructes para crear objetos ligeros comoPoint,FileInfo, etc., de esta manera se conserva memoria porque no hay referencias adicionales que son creadas como se necesiten por objetos clase.

using System;

struct IP{

public byte b1,b2,b3,b4;

}

class ip{

public static void Main(){

IP miIP;

miIP.b1 = 192;

miIP.b2 = 168;

miIP.b3 = 1;

miIP.b4 = 101;

Console.Write("{0}.{1}.", miIP.b1,miIP.b2);

Console.Write("{0}.{1}", miIP.b3,miIP.b4);

}

}

Tipos EnumeracinEs posible establecer un conjunto de constantes relacionadas, por default los elementos de una enumeracin son de tipointdonde el primer elemento tiene el valor0y cada elemento subsecuente se incrementa en 1. Es posible establecer el valor del primer elemento simplemente asignando a este el valor deseado, as como es posible especificar el tipo de dato de los valores contenidos especificandolo despus del nombre de la enumeracin aunque estn restringidos a los tipos:long,int,shortybyte.

Sintaxis:

enum NombreEnumeraciones{

constante1,

constante2,

constante3,

.

.

constanteN

}

Ejemplo:

using System;

public class Enumeracion {

enum enumDias {Sabado, Domingo, Lunes, Martes, Mircoles, Jueves, Viernes };

enum enumMeses {Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,_

Octubre,Noviembre,Diciembre};

enum enumFecha {Dia = 21, Mes = 9, Ao = 1971};

public static void Main() {

Type eDias = typeof(enumDias);

Type eMeses = typeof(enumMeses);

Type eFecha = typeof(enumMeses);

Console.WriteLine("Los das de la semana, y su valor correspondiente en la enumeracin es:");

foreach ( string s in Enum.GetNames(eDias) )

Console.WriteLine( "{0,-11}= {1}", s, Enum.Format( eDias, Enum.Parse(eDias, s), "d"));

Console.WriteLine();

Console.WriteLine("Los meses del ao, y su valor correspondiente en la enumeracin es:");

foreach ( string s in Enum.GetNames(eMeses) )

Console.WriteLine( "{0,-11}= {1}", s, Enum.Format(eMeses, Enum.Parse(eMeses, s), "d"));

}

}

Tipos BaseLos Tipos Base para las enumeraciones se especifican listando el tipo base despus del nombre de la enumeracin:

enum eDias : int{

Lunes,

Martes,

Mircoles,

Jueves,

Viernes

};

Los tipos base vlidos para las enumeraciones son:byte,sbyte,short,ushort,int,uint,longyulong.

Si el tipo base no es especificado, el tipo base por default esint.

Tipos ReferenciaEs contraste avalue typeslosreference typesno almacenan el dato actual que representan, porque almacenan una referencia al dato actual.

Losreference typesque C# utiliza son:

Tipo Objeto Tipo Clase Interfaces Delegados Tipo string ArreglosTipo ObjetoElTipo Objetoes la Clase Base de todos los tipos, al ser la clase base de todos los tipos es posible asignarle valores de cualquier tipo.

El Tipo Objeto es utilizado cuando elvalue typeestaboxed, es decir, que est disponible como un objeto.

Tipo ClaseElTipo Clasecontiene datos miembro, funciones miembro y tipos anidados. Los datos miembro son constantes, campos y eventos. Las funciones miembro incluyen mtodos, propiedades, ndices, operadores, constructores y destructores.

InterfacesUnainterfacedeclara un tipo referencia que tiene slo miembros abstractos. Slo existe la firma pero no tiene implementado todo el cdigo, por lo que no es posible instanciar una interface, slo un objeto que deriva de la interface. Para crear una interface se emplea la palabra reservadainterface:

using System;

interface Iuno{

void AccionUno();

}

class Implementa : Iuno{

public void AccionUno(){

Console.WriteLine("Accin uno...");

}

}

class App{

public static void Main(){

Implementa I = new Implementa();

I.AccionUno();

}

}

Es posible definir mtodos, propiedades e ndices en una interface, cuando se define una Clase es posible derivar de mltiples interfaces, mientras que al definir una interface slo es posible derivar de slo una clase.

Las interfaces estn estrechamente relacionadas aclases abstractas, se parecen a unaclase abstractaque tiene todos sus miembros abstractos.

Cuando un objeto implementa una interface, una referencia a la interface puede ser obtenida por uncastde la interface.

Una clase puede implementar ms de una interface.

class NombreClase : InterfaceA, InterfaceB{}Existe una tcnica llamadaImplementacin de la Interface Explcitay se utiliza para resolver colisiones con nombres de mtodos iguales entre interfaces:

using System;

interface Iuno{

void AccionUno();

}

interface Idos{

void AccionUno();

}

class Implementa : Iuno, Idos{

void Iuno.AccionUno(){

Console.WriteLine("Colisin resuelta con el nombre del mtodo Iuno");

}

void Idos.AccionUno(){

Console.WriteLine("Colisin resuelta con el nombre del mtodo Idos");

}

}

class App{

public static void Main(){

Implementa I = new Implementa();

Iuno uno = (Iuno) I;

uno.AccionUno();

Idos dos = (Idos) I;

dos.AccionUno();

}

}

Es posible ocultar al usuario de la clase la implementacin de una interfaz, as como tambin es posible crear interfaces basadas de otras interfaces.

DelegadosLos delegados son similares a lasinterfaces, especifican un contratado entre uncallery unimplementer(implementador).

Un delegado especifica la forma de una funcin en vez de especificar toda una interface.

Lasinterfacesse crean en tiempo de compilacin y los delegados son creados en tiempo de ejecucin.

Undelegadoencapsula un mtodo con cierta firma, bsicamente un delegado es untype-safeysecure version. Un delegado es una implementacin defunction pointersorientada a objetos y son utilizados en muchas situaciones donde un componente necesita volver a invocar el componente que lo esta usando.

Es posible encapsular mtodos estticos e instancias en una instancia delegado.

El principal uso de los delegados es con los eventos no con las clases.

La especificacin del delegado determina la forma de la funcin y crea una instancia del delegado, se usa la funcin que coincide con la forma.

Los delegados al ser de naturaleza dinmica se utilizan cuando el usuario desea cambiar el comportamiento, por ejemplo si deseamos que una claseOrdenamientosoporte diferentes mtodos de ordenacin, la ordenacin podra ser controlada en base a un delegado que defina la funcin de comparacin.

Notalos delegados siempre son creados an si no son usados, pero los delegados podran ser creados al vuelo si se reemplazan las funciones estticas por propiedades, entonces unicamente se crea el delegado solo si se utiliza la propiedad.

Tipo stringElTipo stringse utiliza para manipular datos string. La clasestringderiva directamente deobjecty no es posible derivarla.

Todos los strings en C# son instancias del tipoSystem.Stringen elCLR.

stringes un alias para la clase predefinidaSystem.Stringy su uso es muy sencillo:

string sWebSite = "http://www.informatique.com.mx";Para acceder a un caracter, simplemente acceda a su ndice:

sWebSite[11];Es posible hacer un barrido de los caracteres que componen elstringutilizando la propiedadLengthque poseen los arreglos y porque es posible acceder a estos tratando alstringcomo un arreglo:

using System;

class App{

public static void Main(){

string sWebSite = "http://www.informatique.com.mx";

Console.WriteLine("sWebSite contiene : " + sWebSite.Length + " caracteres");

for(int iElemento = 0; iElemento < sWebSite.Length; iElemento++){

Console.WriteLine("Elemento " + iElemento + " : " + sWebSite[iElemento]);

}

}

}

Es posible concatenar strings utilizando el operador+.

Si requiere comparar strings por igualdad utilice el operador de comparacin==Aunquestringes unreference typela comparacin se realiza comparando los valores no las referencias.

La claseStringes un ejemplo de tipo inmutable, es decir, que los caracteres contenidos en el string no puede ser modificados por los usuarios del string, todas las operaciones que son realizadas por la claseStringregresan una versin modificada del string en vez de modificar la instancia en la cual se invoco el mtodo.

La claseStringsoporta los sisguientes mtodos de comparacin y bsqueda:

MtodoDescripcin

Compare()Compara dos strings.

CompareOrdinal()Compara dos regiones de strings utilizando una comparacin ordinal

CompareTo()Compara la instancia actual con otra instancia.

EndsWith()Determina cuando un substring existe al final de un string

StartsWith()Determina cuando un substring existe al principio de un string.

IndexOf()Regresa la posicin de la primer ocurrencia de un substring

LastIndexOf()Regresa la posicin de la ltima ocurrencia de un substring

Concat()Concatena dos o ms strings u objetos, si se pasan objetos la funcinToStringes invocada

CopyTo()Copia un nmero especfico de caracteres de una ubicacin del string dentro del arreglo

Insert()Regresa un nuevo string con un substring insertado en la ubicacin especfica

Join()Une un arreglo de strings junto con un separador entre cada elemento del arreglo

PadLeft()Alinea a la izquierda un string

PadRight()Alinea a la derecha un string

Remove()Elimina caracteres de un string

Replace()Reemplaza todas las instancias de un caracter con caracteres diferentes

Split()Crea un arreglo de strings dividiendo un string en cualquier ocurrencia de uno o ms caracteres

Substring()Extrae un substring de un string

ToLower()regresa una versin de un string en minsculas

ToUpper()regresa una versin de un string en maysculas

Trim()Elimina espacios en blanco de un string

TrimEnd()Elimina un string de caracteres al final de un string

TrimStart()Elimina un string de caracteres al inicio de un string

object.ToString(), convierte un objeto a una representacin string.String.Format()puede ser utilizada para crear un string basado en los valores de otro string.

La claseStringBuildersoporta las siguientes propiedades y mtodos:

PropiedadDescripcin

CapacityRecupera o establece el nmero de caracteres queStringBuilderpuede contener

[]ndiceStringBuilderutilizado para obtener o establecer un caracter en la posicin especfica

LengthRecupera o establece la longitud

MaxCapacityRecupera la capacidad mxima delStringBuilder

MtodoDescripcin

Append()Agrega la representacin string de un objeto

AppendFormat()Agrega la representacin string de un objeto, utilizando un formato especfico para el objeto

EnsureCapacity()Asegura queStringBuildertiene suficiente espacio para un nmero de caracteres especfico

Insert()Inserta la representacin string de un objeto especfico en una posicin especfica

Remove()Elimina los caracteres especficos

Replace()Reemplaza todas las instancias de un caractes con un nuevo caracter

ArreglosUnarreglocontiene variables a las cuales se accede a travs de ndices, todas las variables contenidas en el arreglo son referidos comoelementoslos cuales deben ser del mismo tipo, por lo que el tipo del arreglo.

Los arreglos en C# son referencias a objetos. Un arreglovalue typeno contiene instanciasboxed.

El valor inicial de un arreglo esnull, unarreglo de objetoses creado utilizandonew.

Cuando un arreglo es creado inicialmente contiene los valores por default para los tipos que este contendr.

Sintaxis:

tipo[] identificador;Noteque para definir un arreglo se utilizan los corchetes[]despus del tipo del arreglo.

Ejemplo:

string[] aPersonas;Es posible inicializar un arreglo al momento de crearlo:

string[] asPersonas = new string[] {"Tim Berners-Lee","Brendan Eich","Dennis Ritchie","James Gosling"};Durante la inicializacin es posible omitirnew tipo[x]y el compilador podra determinar el tamao de almacenamiento para el arreglo del nmero de items en la lista de inicializacin:

string[] asPersonas = {"Tim Berners-Lee","Brendan Eich","Dennis Ritchie","James Gosling"};Cada elemento de un arreglo deintses unintcon el valor0:

int[] aiNumeros = new int[5];Cada elemento de un arreglo destringses unstringcon el valornull:

string[] asNombres = new string[5];La dimensin del arreglo puede ser simple o multidimensional, donde cada dimensin comienza con el ndice0, si requiere hacer un barrido de todos los elementos del arreglo, comience a partir del ndice0hasta la longitud del arreglo menos uno (nombreArreglo.Length - 1onIndice < nombreArreglo.Length);

using System;

class Arreglo{

static public void Main(){

string[] aNombres = {"Hugo","Paco","Luis"};

Console.WriteLine(aNombres[0]);

Console.WriteLine(aNombres[1]);

Console.WriteLine(aNombres[2]);

}

}

Otra alternativa al ejemplo anterior es:

int[] aiNumeros = new int[3];

aiNumeros[0] = 4;

aiNumeros[1] = 33;

aiNumeros[2] = 43;

Al declarar el arreglo especifique solamente el nmero de elementos que este contendr. utilice la palabre reservadanewseguido del tipo y entre corchetes el nmero de elementos que contendr.

Es posible ordernar y buscar los elementos de un arreglo gracias a que los arreglos en C# estn basados en el tipoSystem.Arraydelruntime NET. El mtodoSort()podra ordenar los elementos de un arreglo, los mtodosIndexOf()yLastIndexOf()yBinarySearchpodran buscar elementos en un arreglo. El mtodoReversepodra invertir el orden de los elementos de un arreglo.

Arreglos MultidimensionalesLosArreglos Multidimensionalesson aquellos que tienen ms de una dimensin.

Sintaxis:

tipo[,] identificador;Ejemplo:

string[,] asBidimensional = new string[2, 4];Para definir un arreglo multidimensional, simplemente defina arreglos como elementos del arreglo:

string[,] asMulti = {{"a","1"},{"b","2"},{"c","3"}};Ejemplo:

using System;

class App{

public static void Main(){

string[] asPersonas = {"Tim Berners-Lee", "Brendan Eich", "Dennis M. Ritchie", "James Gosling"};

Console.WriteLine("Longitud del arreglo asPersonas : " + asPersonas.Length);

int[] aiNumeros = new int[3] {1, 2, 3};

Console.WriteLine("Longitud del arreglo aiNumeros : " + aiNumeros.Length);

//Define 4 arreglos de 2 dimensiones

int iRenglon = 4;

int iColumna = 2;

string[,] asBidimensional = new string[iRenglon, iColumna];

// 4 renglones * 2 columnas = 8 Elementos

asBidimensional[0,0] = "00";

asBidimensional[0,1] = "01";

asBidimensional[1,0] = "10";

asBidimensional[1,1] = "11";

asBidimensional[2,0] = "20";

asBidimensional[2,1] = "21";

asBidimensional[3,0] = "30";

asBidimensional[3,1] = "31";

Console.WriteLine("Longitud del arreglo asBidimensional : " + asBidimensional.Length);

int[,] aiBidimensional = { {11,22}, {33,44}, {55,66}, {77,88} };

for(int i = 0; i < iRenglon; i++){

for(int j = 0; j < iColumna; j++){

Console.WriteLine("Dimensin " + i + " elemento " + j + " : " + aiBidimensional[i,j]);

}

}

Console.WriteLine("Longitud del arreglo aiBidimensional : " + aiBidimensional.Length);

}

}

Arreglo de ArreglosUnArreglo de Arregloses tambin conocido comojagged arrayporque no tiene que ser rgido.

Por ejemplo:

int[][] aiIDs = new int[3][];Este ejemplo define un arreglo de arreglo de tipointdonde su dimensin es 3 elementos, donde estos elementos son arreglos.

Arreglos de ObjetosUnarreglo de objetoses creado utilizandonew.

Es posible declarar y manipular arreglos de objetos de la siguiente manera:

using System;

public class Persona{

//Propiedades

public string sNombre;

public int iEdad;

//Constructor

public Persona(string sNombre, int iEdad){

this.sNombre = sNombre;

this.iEdad = iEdad;

}

//Mtodos

public string Tipo(){

return "Persona";

}

}

//Herencia Simple

public class Empleado : Persona{

public Empleado(string sNombre, int iEdad):base(sNombre, iEdad){}

public new string Tipo(){

return "Empleado";

}

}

class App{

//Aplicacin

public static void Main(){

Persona Mexicano = new Persona("Gerado ngeles Nava", 33);

Console.WriteLine("Mexicano.sNombre : " + Mexicano.sNombre);

Console.WriteLine("Mexicano.iEdad : " + Mexicano.iEdad);

Console.WriteLine("Mexicano.Tipo : " + Mexicano.Tipo());

Console.WriteLine("--- Arreglo de Objetos ---");

Empleado[] aProgramadores = new Empleado[2];

aProgramadores[0] = new Empleado("Bill Gates", 50);

aProgramadores[1] = new Empleado("Eric S. Raymond", 60);

for(int i = 0; i < aProgramadores.Length; i++){

Console.WriteLine("aProgramadores["+i+"].sNombre : " + aProgramadores[i].sNombre);

Console.WriteLine("aProgramadores[" + i + "].iEdad : " + aProgramadores[i].iEdad);

Console.WriteLine("aProgramadores[" + i + "].Tipo : " + aProgramadores[i].Tipo());

}

}

}

Conversin de ArreglosUnaconversin implcitaes posible si los arreglos tienen el mismo nmero de dimensiones, si los elementos de un arreglo tienen una conversin de referencia implcita para los tipos de elementos del otro arreglo y ambos arreglos son tipos referencia.

Unaconversin explcitatiene los mismos requerimientos de una conversin implcita excepto que los elementos de un arreglo deben ser convertibles explcitamente a los tipos de elementos del otro arreglo.

ClaseArrayLa claseArrayprovee entre otras, funciones de bsqueda y ordenamiento.

En el siguiente ejemplo se muestra como es ordenado un arreglo de strings:

using System;

class App{

public static void Main(){

string[] aLenguajes = {"Java", "Pascal", "ActionScript", "PHP", "C#", "SQL",

"JavaScript", "C", "Java", "Prolog", "Visual Basic", "C++"};

Array.Sort(aLenguajes);

for(int elemento = 0; elemento < aLenguajes.Length; elemento++)

Console.WriteLine("Elemento [" + elemento + "] = " + aLenguajes[elemento]);

}

}

Salida:

Elemento [0] = ActionScript

Elemento [1] = C

Elemento [2] = C#

Elemento [3] = C++

Elemento [4] = Java

Elemento [5] = Java

Elemento [6] = JavaScript

Elemento [7] = Pascal

Elemento [8] = PHP

Elemento [9] = Prolog

Elemento [10] = SQL

Elemento [11] = Visual Basic

La funcinSort(), tambin se puede utilizar con nmeros:

using System;

class App{

public static void Main(){

double[] aNumeros = {8.7, 6.9, -6.5, 4.2, -102.09, 1.9, 0.01, -0.002, 99.87};

Array.Sort(aNumeros);

for(int elemento = 0; elemento < aNumeros.Length; elemento++)

Console.WriteLine("Elemento [" + elemento + "] = " + aNumeros[elemento]);

}

}

Salida:

Elemento [0] = -102.09

Elemento [1] = -6.5

Elemento [2] = -0.002

Elemento [3] = 0.01

Elemento [4] = 1.9

Elemento [5] = 4.2

Elemento [6] = 6.9

Elemento [7] = 8.7

Elemento [8] = 99.87

InterfaceIComparableLa funcinsortno trabaja con clases o estructuras porque no conoce su orden, pero si desea ordenarlas utilice la interfaceIComparable, por ejemplo una ordenacin utilizando una propiedad numrica:

using System;

public class Lenguaje : IComparable{

string nombre;

int id;

public Lenguaje(string nombre, int id){

this.nombre = nombre;

this.id = id;

}

int IComparable.CompareTo(object o){

Lenguaje lenguajeB = (Lenguaje)o;

if(this.id > lenguajeB.id){return 1;}

if(this.id < lenguajeB.id){