c sharp 2008

Upload: donis-montoya

Post on 08-Apr-2018

254 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/6/2019 c sharp 2008

    1/106

    canalvisual

    basic .netRecursos Visual Basic.NET, VB.NET,Manuales de programacin, Tutoriales,Foros de programacin, Comunidad de

    programadores Principio del formulario

    Final del formulario

    Usuarios activos: 126

    Servicios Inicio Visual Basic

    Chat

    Gua de recursos Empleo

    Descargas

    Tutoriales

    Buscador de APIs

    Foros General

    Visual Basic

    Visual Basic .NET

    Bases de datos

    Crystal reports

    C/C++

    C# C Sharp

    ASP.NET

    Java

    PHP

    ABAP

    http://www.canalvisualbasic.net/http://www.canalvisualbasic.net/http://www.canalvisualbasic.net/http://www.canalvisualbasic.net/http://www.canalvisualbasic.net/http://www.canalvisualbasic.net/http://www.canalvisualbasic.net/http://www.canalvisualbasic.net/http://www.canalvisualbasic.net/servicios/chat/http://www.canalvisualbasic.net/foro/guia-de-recursos/http://www.canalvisualbasic.net/foro/trabajo-ofertas-y-demandas/http://www.canalvisualbasic.net/foro/area-de-descarga/http://www.canalvisualbasic.net/foro/documentos-y-tutoriales/http://www.canalvisualbasic.net/servicios/apis/http://www.canalvisualbasic.net/foro/http://www.canalvisualbasic.net/foro/visual-basic-6-0/http://www.canalvisualbasic.net/foro/visual-basic-net/http://www.canalvisualbasic.net/foro/bases-de-datos-ado-ado-net/http://www.canalvisualbasic.net/foro/crystal-reports/http://www.canalvisualbasic.net/foro/c-c-y-c-cli/http://www.canalvisualbasic.net/foro/c-c-sharp/http://www.canalvisualbasic.net/foro/asp-asp-net-programacion-web/http://www.canalvisualbasic.net/foro/java/http://www.canalvisualbasic.net/foro/php/http://www.canalvisualbasic.net/foro/abap/http://www.canalvisualbasic.net/http://www.canalvisualbasic.net/servicios/chat/http://www.canalvisualbasic.net/foro/guia-de-recursos/http://www.canalvisualbasic.net/foro/trabajo-ofertas-y-demandas/http://www.canalvisualbasic.net/foro/area-de-descarga/http://www.canalvisualbasic.net/foro/documentos-y-tutoriales/http://www.canalvisualbasic.net/servicios/apis/http://www.canalvisualbasic.net/foro/http://www.canalvisualbasic.net/foro/visual-basic-6-0/http://www.canalvisualbasic.net/foro/visual-basic-net/http://www.canalvisualbasic.net/foro/bases-de-datos-ado-ado-net/http://www.canalvisualbasic.net/foro/crystal-reports/http://www.canalvisualbasic.net/foro/c-c-y-c-cli/http://www.canalvisualbasic.net/foro/c-c-sharp/http://www.canalvisualbasic.net/foro/asp-asp-net-programacion-web/http://www.canalvisualbasic.net/foro/java/http://www.canalvisualbasic.net/foro/php/http://www.canalvisualbasic.net/foro/abap/http://www.canalvisualbasic.net/http://www.canalvisualbasic.net/
  • 8/6/2019 c sharp 2008

    2/106

    Manuales .NET Manual VB.NET

    ADO.NET

    Manual C#

    Manuales Metodologa

    Inicio con Visual Basic

    Manual Visual Basic

    Acceso a datos DAO

    Anlisis BBDD

    Bases de datos

    POO SQL

    SQL Server

    Descargas Bases de datos

    Disco

    Ficheros

    Grficos

    Juegos Multimedia

    Controles OCX

    Manuales

    Varios Guia API

    Trucos VB

    TCP/IP

    Sistemas operativos Redes

    Delphi

    Data Warehousing

    C++

    Ensamblador

    Blog de literatura

    Juegos online

    Camisetas online Series de televisin

    http://www.canalvisualbasic.net/manual-net/vb-net/http://www.canalvisualbasic.net/manual-net/ado-net/http://www.canalvisualbasic.net/manual-net/c-sharp/http://www.canalvisualbasic.net/manual/metodologia/http://www.canalvisualbasic.net/manual/inicio-visual-basic/http://www.canalvisualbasic.net/manual/manual-visual-basic/http://www.canalvisualbasic.net/manual/acceso-datos-dao/http://www.canalvisualbasic.net/manual/analisis-bbdd/http://www.canalvisualbasic.net/manual/bbdd/http://www.canalvisualbasic.net/manual/poo/http://www.canalvisualbasic.net/manual/sql/http://www.canalvisualbasic.net/manual/sql-server/http://www.canalvisualbasic.net/descargas/bases-datos/http://www.canalvisualbasic.net/descargas/disco/http://www.canalvisualbasic.net/descargas/ficheros/http://www.canalvisualbasic.net/descargas/graficos/http://www.canalvisualbasic.net/descargas/juegos/http://www.canalvisualbasic.net/descargas/multimedia/http://www.canalvisualbasic.net/descargas/controles-ocx/http://www.canalvisualbasic.net/descargas/manuales/http://www.canalvisualbasic.net/otros/guia-api/http://www.canalvisualbasic.net/otros/trucos-vb/http://www.canalvisualbasic.net/otros/tcp-ip/http://www.canalvisualbasic.net/otros/sistemas-operativos/http://www.canalvisualbasic.net/otros/redes/http://www.canalvisualbasic.net/otros/delphi/http://www.canalvisualbasic.net/otros/data-warehousing/http://www.canalvisualbasic.net/otros/c-plusplus/http://www.canalvisualbasic.net/otros/ensamblador/http://www.lecturalia.com/blog/http://www.juganding.com/http://www.camisetastas.com/http://www.ultimatemporada.com/http://www.canalvisualbasic.net/manual-net/vb-net/http://www.canalvisualbasic.net/manual-net/ado-net/http://www.canalvisualbasic.net/manual-net/c-sharp/http://www.canalvisualbasic.net/manual/metodologia/http://www.canalvisualbasic.net/manual/inicio-visual-basic/http://www.canalvisualbasic.net/manual/manual-visual-basic/http://www.canalvisualbasic.net/manual/acceso-datos-dao/http://www.canalvisualbasic.net/manual/analisis-bbdd/http://www.canalvisualbasic.net/manual/bbdd/http://www.canalvisualbasic.net/manual/poo/http://www.canalvisualbasic.net/manual/sql/http://www.canalvisualbasic.net/manual/sql-server/http://www.canalvisualbasic.net/descargas/bases-datos/http://www.canalvisualbasic.net/descargas/disco/http://www.canalvisualbasic.net/descargas/ficheros/http://www.canalvisualbasic.net/descargas/graficos/http://www.canalvisualbasic.net/descargas/juegos/http://www.canalvisualbasic.net/descargas/multimedia/http://www.canalvisualbasic.net/descargas/controles-ocx/http://www.canalvisualbasic.net/descargas/manuales/http://www.canalvisualbasic.net/otros/guia-api/http://www.canalvisualbasic.net/otros/trucos-vb/http://www.canalvisualbasic.net/otros/tcp-ip/http://www.canalvisualbasic.net/otros/sistemas-operativos/http://www.canalvisualbasic.net/otros/redes/http://www.canalvisualbasic.net/otros/delphi/http://www.canalvisualbasic.net/otros/data-warehousing/http://www.canalvisualbasic.net/otros/c-plusplus/http://www.canalvisualbasic.net/otros/ensamblador/http://www.lecturalia.com/blog/http://www.juganding.com/http://www.camisetastas.com/http://www.ultimatemporada.com/
  • 8/6/2019 c sharp 2008

    3/106

    Software Blog de software

    Descargar Microsoft Office

    Descargar Firefox 3

    Descargar eMule

    Descargar Nero

    Descargar Ares

    Descargar Windows Live Messenger

    Descargar Photoshop

    Descargar CorelDraw

    Descargar Virtual DJ

    Descargar NOD32 Antivirus

    Manuales .NET : Manual C#ndice Temtico

    Bsico Intermedio Avanzado

    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

    http://www.malavida.com/blog/http://microsoft-office.malavida.com/http://firefox.malavida.com/http://emule.malavida.com/http://nero.malavida.com/http://ares.malavida.com/http://windows-live-messenger.malavida.com/http://photoshop.malavida.com/http://coreldraw.malavida.com/http://virtual-dj.malavida.com/http://nod32.malavida.com/http://www.malavida.com/blog/http://microsoft-office.malavida.com/http://firefox.malavida.com/http://emule.malavida.com/http://nero.malavida.com/http://ares.malavida.com/http://windows-live-messenger.malavida.com/http://photoshop.malavida.com/http://coreldraw.malavida.com/http://virtual-dj.malavida.com/http://nod32.malavida.com/
  • 8/6/2019 c sharp 2008

    4/106

  • 8/6/2019 c sharp 2008

    5/106

    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

    Interface IComparable

    Interface IComparer

    IComparer Como Propiedad

    Expresiones Regulares

    Operadoras

    Secuencias de Escape

    Boxing

    Conversiones Boxing

    Conversiones Unboxing

    Constructores y Destructores

    Constructor Esttico

    Mtodos

    Parmetros

    Valores en Parmetros in

    Valores en Parmetros ref

    Valores en Parmetros out

    Ejemplo de Parmetros In, Ref y Out

    Redefinicin de Mtodos (Overriding)

    Ocultamiento de Mtodos (Hiding)

    Propiedades

    Accessors

    Propiedades Estticas

  • 8/6/2019 c sharp 2008

    6/106

    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

    Conversiones

    Bsico Intermedio Avanzado

    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

  • 8/6/2019 c sharp 2008

    7/106

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

  • 8/6/2019 c sharp 2008

    8/106

    Funcin Equals()

    Bsico Intermedio Avanzado

    Clase Hashtable

    Interface IHashCodeProvider

    Funcin ICloneable 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 ycorre en el Lenguaje Comn en Tiempo de Ejecucin (CLR, Common LanguageRuntime). El primer lenguaje en importancia para el CLR es C#, mucho de lo quesoporta 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, simplificay 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 ymenos propenso a errores.

    Algunas caractersticas de C# son:

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

    No soporta herencia mltiple, solamente el runtime .NET permite la herenciamltiple en la forma de interfaces, las cuales no pueden contenerimplementacin.

    No maneja apuntadores, para emular la funcin de los apuntadores se utilizadelegates el 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 deadministrar la memoria en los programas C#.

    El manejo de errores est basado en excepciones.

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

    El Modelo completo de clases est construido en la cima del .NET VirtualObject System (VOS). El modelo de objetos es parte de la infraestructura y yano 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 viauna instancia de clase) o un miembro esttico (via el tipo).

  • 8/6/2019 c sharp 2008

    9/106

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

    Soporta los modificadores de acceso private, protected, public y agrega uncuarto modificadorinternal.

    Solamente se permite una base clase, si se requiere herencia mltiple es posibleimplementar 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 LanguageSpecification, el cual define el estdar de interoperabilidad entre lenguajes quese 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 paraacceder a APIs nativas es llamada Platform Invocation Services (PInvoke)

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

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

    Lenguaje Orientado a Objetos

    SegnBjarne Stroustrup autor del lenguaje de programacin C++, para que un lenguajesea llamado Orientado a Objetos debe soportar tres conceptos: objetos, clases yherencia.

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

    1. Encapsulacin

    2. Herencia

    3. Polimorfismo

    Objeto

    Un Objeto es una instancia de un tipo de clase.La instanciacin es el acto de crear una instancia de un objeto, la instancia es un objeto,la instanciacin usa el operadornew, despus la instanciacin es posible comunicarnoscon el objeto a travs de sus miembros.

    Un Objeto es una coleccin de informacin relacionada y funcional.

    Un objeto se compone de:

    Datos que describen el objeto y

    Operaciones que pueden ser realizadas por el objeto

    Herencia

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

  • 8/6/2019 c sharp 2008

    10/106

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

    Una clase derivada es la nueva clase que esta siendo creada y la clase base es una de lascuales la nueva clase es derivada. La nueva clase derivada hereda todos los miembrosde 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 laclase base.

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

    "un empleado es una persona".

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

    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, elprogramador 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 laltima clase base llamada object y existe slo una herencia simple de objetos.

    Un objeto puede derivar slo de una clase base.

    Clase

    Una Clase es una plantilla para un objeto.

    Una Clase define las operaciones que un objeto puede realizar y define un valor quemantiene 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 objetoinvocando sus mtodos y accediendo a sus propiedades, eventos y campos.

    Una clase utiliza modificadores para especificar la accesibilidad de la clase y suscomponentes, los componentes de una clase son llamados miembros por lo que existendiferentes tipos de miembros. Una referencia se refiere a una instancia, una instancia esla creacin de un objeto del tipo clase que se est declarando. Una clase utilizaninguno, uno o ms constructores para ayudar a definir la instancia de una clase. Existe

    una palabra reservada llamada this que sirve para hacer referencia a la clase actual enel mbito en el cual es utilizada. Cuando se hace referencia a una variable de instanciaque tiene el mismo nombre de un parmetro se debe utilizarthis.name.

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

    Funciones Miembro

    Una Funcin Miembro puede ser un constructor, es decir, una pieza de cdigo que esinvocada en una instancia del objeto.

    Campos Estticos

    Un Miembro Esttico definine miembros de un objeto que no son asociados con unainstancia de clase especfica.

  • 8/6/2019 c sharp 2008

    11/106

    Un Campo Esttico es el tipo ms simple de un miembro esttico, para declarar uncampo esttico se utiliza el modificadorstatic.

    Un campo esttico puede accederse a travs del nombre de la clase, en vez de lainstancia de la clase (objeto):

    using System;

    class MiContador{//Campo Estticopublic 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 Base

    Una Clase base es un objeto padre de donde se basa un nuevo trabajo.

    Clase Derivada

    Una Clase derivada es un objeto hijo.

    Clase Abstracta

    Una Clase Abstracta define las funciones que una clase derivada debe implementar.

    Una Clase Abstracta define un contrato en donde las clases derivadas deben definir lasfunciones que la clase padre marca utilizando la palabra reservada abstract, ademsque la clase padre tambin se define como abstract.

    using System;abstract public class Persona{//Indica que la clase es

    abstracta//Propiedadespublic string sNombre;public int iEdad;//Constructorpublic Persona(string sNombre, int iEdad){

    this.sNombre = sNombre;this.iEdad = iEdad;}//Mtodosabstract public string Tipo();//Mtodo que la clase

    derivada debe implementar}//Herencia Simplepublic class Empleado : Persona{

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

    override public string Tipo(){return "Empleado";

    }}

  • 8/6/2019 c sharp 2008

    12/106

    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 Sealed

    Una Clase sealedse utiliza para prevenir que una clase sea utilizada como una clasebase, 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 inheritfrom sealed class 'ClaseBase'

    sealed.cs(1,14): (Location of symbol related to previous error)

    El error es porque ClaseDerivada no puede utilizarClaseBase como una clase baseporque ClaseBase es sealed, es decir, no permite derivaciones.

    Overloading/SobrecargaLa Sobrecarga (Overloading) hace posible utilizar dos o ms clases con el mismonombre, pero con parmetros diferentes. La sobrecarga es comn especialmente para losconstructores para definir diferentes maneras de crear una instancia nueva.

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

    Herencia Simple

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

  • 8/6/2019 c sharp 2008

    13/106

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

    base sin parmetros.

    using System;public class Persona{

    //Propiedadespublic string sNombre;public int iEdad;private double dSueldo;//Constructorpublic Persona(string sNombre, int iEdad){

    this.sNombre = sNombre;this.iEdad = iEdad;

    }//Mtodospublic string Tipo(){

    return "Persona";}public void AsignarSueldo(double dSueldo){

    this.dSueldo = dSueldo;}public double ObtenerSueldo(){

    return this.dSueldo;}

    }//Herencia Simplepublic class Empleado : Persona{

    public Empleado(string sNombre, intiEdad):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{

    //Aplicacinpublic 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 ---");

  • 8/6/2019 c sharp 2008

    14/106

    Empleado Programador = new Empleado("CarlosSalinas 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 Virtuales

    El polimorfismo es la funcionalidad que permite a cdigo antiguo invocar cdigonuevo, tambin permite extender el sistema sin modificar el cdigo existente, esto selogra sobreescribiendo o redefiniendo el cdigo, para lo cual se utilizan funciones

    virtuales y la palabra clave override.Las funciones abstractas son automaticamente funciones virtuales, las cuales permitenal programador usar polimorfismo para hacer su cdigo simple.

    Virtual significa que cuando una invocacin a funciones miembro, el compiladordebera 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{

    //Propiedadespublic string sNombre;public int iEdad;//Constructorpublic Persona(string sNombre, int iEdad){

    this.sNombre = sNombre;this.iEdad = iEdad;

    }//Mtodosvirtual public string Tipo(){

    return "Persona";}

    }//Herencia Simplepublic class Empleado : Persona{

    public Empleado(string sNombre, intiEdad):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);

  • 8/6/2019 c sharp 2008

    15/106

    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 reservadaoverride significa que es lamisma funcin que fue declarada en la clase base, si la palabra reservadaoverride seomite el compilador podra asumir que la funcin no est relacionada a la funcin de laclase base y no despacha la funcin virtual (el compilador podra sugerir omitiroverride o agregarnew) .

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

    Por ejemplo, el objeto base object tiene una funcin virtual llamada ToString() queconvierte un objeto a string. Si se invoca la funcin ToString() en un objeto que que

    no la tiene como versin propia, la versin de la funcin que es parte de la clase objectpodra ser invocada.

    Encapsulacin y Visibilidad

    Encapsulacin (tambin llamada information hiding), habilidad de un objeto paraocultar sus datos internos o parte interna de sus usuarios y provee una interface que hacelas partes importantes del objeto accesible programaticamente.

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

    Al disear objetos el programador decide que objetos son visibles al usuario y que esprivado 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 laoportunidad de que el usuario cambie o dependa de los detalles en el cdigo, siel usuario hace lode detalles dependientes, los cambios realizados en el objetoquiz arruinen el cdigo del usuario.

    Los cambios realizados en partes pblicas de un objeto deben permanecercompatibles con la versin previa. Las partes pblicas pueden ser cambiadas sinarruinar el cdigo del usuario.

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

  • 8/6/2019 c sharp 2008

    16/106

    Abstraccin

    Una Abstraccin se refiere a como un problema dado es representado en el espacio deprograma.

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

    publicamente.

    Los beneficios de una buena abstraccin, es disearla de manera tal que lasmodificaciones son minimas, si se conoce bien el problema a resolver facilitadeterminar que mtodos necesitara el usuario, tambin ser un sistema fcil de entendery mantener.

    La interfaz de clase es la implementacin de la abstraccin.

    Plataforma .NET

    La solucin Microsoft .NET comprende cuatro componentes fundamentales:1. Servicios de Bloques de Construccin .NET o acceso programtico para

    ciertos servicios tales como almacenamiento de archivos, calendario ypasaporte .NET el cual es un servicio de verificacin de identidad.

    2. Dispositivos de Software .NET el cual podra correr sobre nuevos dispositivosInternet.

    3. La Experiencia de Usuario .NET la cual incluye caractersticas tales comointerfaz natural, agentes de informacin y etiquetas inteligentes es decir unatecnologa que automatiza hiperligas para informacin relacionada a palabras yfrases en documentos creados por el usuario.

    4. La Infraestructura .NET la cual comprende la plataforma .NET, MicrosoftStudio .NET, los Servidores Corporativos .NET y Microsoft Windows .NET

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

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

    El CLR es como una mquina virtual (el cdigo que corre dentro del CLR en ejecucinen un ambiente encapsulado y controlado, separados de otros procesos en la mquina)

    en la cual funcionan las aplicaciones .NET, todos los lenguajes .NET tienen labiblioteca de clases de la Plataforma .NET a su disposicin.

    La biblioteca de clases de la Plataforma .NET incluyen soporte para cualquiera de losarchivos 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 desarrolloen ambientes altamente distribuidos de Internet. La Plataforma .NET est diseada paracumplir los siguientes objetivos:

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

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

  • 8/6/2019 c sharp 2008

    17/106

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

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

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

    Construir toda la comunicacin sobre estndares industriales para asegurar queel cdigo basado en la Plataforma .NET pueda integrarse con cualquier otrocdigo.

    La Plataforma .NET consiste de dos componentes principales:

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

    2. La Biblioteca de Clases de la Plataforma .NET, es una coleccin orientada aobjetos de tipos reusables que pueden utilizarse para desarrollar aplicaciones enel rango de aplicaciones tradicionales desde la lnea de comandos o interfaces deusuario 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 deserviciones principales como la administracin de memoria, administracin de hilos,tambin implementa tipos estrictos de seguridad y otras formas de verificacin decdigo que aseguren la seguridad y robustez.

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

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

    .NET Common Language Runtime - CLR

    El .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 decomponentes. Todos los objetos son escritos como componentes y los componentes sonel 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 serutilizados sin un proceso de registro.

    C# ayuda en la creacin de componentes mediante el runtime yframework.NET, loscuales proveen un sistema de tipo unificado en el cual todo puede ser tratado como unobjeto.

    Caractersticas del CLR

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

  • 8/6/2019 c sharp 2008

    18/106

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

    Integracin de lenguajes a travs del Common Language Specification

    Administracin automatica de memoria, a travs del recolector de basura.

    Manejo de excepciones de lenguajes.

    Seguridad type safety. Soporte de versiones.

    Modelo Simplificado para la interaccin de componentes.

    El CLR provee los beneficios anteriores, el compilador debe emitir los metadatos en elmanaged code. Los metadatos describen los tipos en el cdigo y son empaquetados enel cdigo ejecutable.

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

    La seguridad y administracin de componentes depende de un nmero de factores quese 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 mismaaplicacin 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 infraestrucutraestricta de verificacin de cdigo llamado Common Type System (CTS), el cual aseguraque toda la administracin de cdigo se describe as misma. La variedad decompiladores Microsoft y de terceros genera cdigo administrado que conforma el CTS,es decir, que la administracin de cdigo puede consumir otros tipos e instanciasadministradas, mientras que se forza estrictamente la fidelidad de tipo y seguridad detipo.

    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 lenguajeque un programador utilice, puede utilizar las ventajas del runtime, biblioteca de clases,y componentes escritos por otros programadores, cualquier compilador que utilice elruntime puede hacer lo mismo,

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

    El runtime est diseado para incrementar el desempeo, atravs del CLR que proveemuchos servicios estndar, el cdigo administrado nunca es interpretado, unacaracterstica 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 esteejecutando. El administrador de memoria elimina las posibilidades de fragmentacin dememoria e incrementa la referencia de localidad de memoria para impulsar elincremento del desempeo.

    El runtime soporta aplicaciones del lado del servidor como Microsoft SQL Server eInternet Information Services (IIS), esta infraestructura permite utilizar codigo

    administrado para escribir la lgica del negocio..NET Runtime Environment

  • 8/6/2019 c sharp 2008

    19/106

    El 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 laarquitectura 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 Web Interfaz de UsuarioDatos y XML

    Clases Base

    Lenguaje Comn en Tiempo de Ejecucin

    Ambiente/Entorno de Ejecucin

    El ambiente o entorno provee un modelo de programacin simple, seguro, soporta deherramientas potentes y ayuda con la distribucin, empaquetado y soporte:

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

    bibliotecas.

    En el runtime .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 tiempode ejecucin, la funcionalidad del BCL incluye:

    Clases coleccin, tales como consultas, arreglos, pilas y tablas hash.

    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 otroscomponentes que controlan la interfaz de usuario (UI) y realizan otras

    operaciones sofisticadas. Seguridad, el entorno del runtime .NETest diseado para ser un entorno

    seguro. El runtime .NETes un entorno administrado o controlado, lo cualsignifica que el runtime administra la memoria por el programador a travs delrecolector de basura.

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

    El sistema de seguridad interactua con el verificador para asegurar que el cdigorealice slo lo que tiene permitido hacer, esto es posible especificando unrequerimiento 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

  • 8/6/2019 c sharp 2008

    20/106

    por el runtime .NET, el modelo de ejecucin comn hace la depuracin delenguajes simple y directa.

    Distribucin, empaquetado y soporte, El runtime .NETayuda simplificando ladistribucin 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 loscomponentes de una aplicacin por lo que una aplicacin slo corre con loscomponentes que son enviados.

    Ensamblaje

    En el runtime .NETel mecanismo de empaquetado es el ensamble (assembly), cuando elcdigo es compilado por uno de los compiladores .NET, es convertido a una formaintermedia conocida comoIL.

    El ensamble contiene todos losIL, metadatos y otros archivos requeridos para que unpaquete se ejecute en un paquete completo.

    Cada ensamble contiene un manifiesto que enumera todos los archivos que estncontenidos en el ensamble, controla que tipos y recursos son expuestos fuera delensamble y relaciona las referencias de esos tipos y recursos a los archivos quecontienen 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 ensamblepara ser auto-descrito.

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

    Interoperabilidad de Lenguaje

    Una de las metas del runtime .NETes ser un lenguaje agnstico, permitiendo que elcdigo sea utilizado y escrito desde cualquier lenguaje, no slo las clases pueden serescritas 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 unaclase 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 propiascaractersticas del lenguaje, ya que un lenguaje no podra soportar ciertas cosas que otrosi 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 cualdescribe que caractersticas pueden ser visibles en la interfaz pblica de la clase, porejemplo elCLS prohibe exponer tipos de datos sin signo, porque no todos los lenguajes

    pueden utilizarlos.

    Atributos

    El runtime .NETsoporta atributos personalizables, los cuales son en cierto sentido unlugar para colocar informacin descriptiva en los metadatos junto con un objeto yentonces recuper despus los datos. Los atributos proveen un mecanismo general parahacer esto y son utilizados en exceso en todo el tiempo de ejecucin para almacenarinformacin que modifica como el runtime utiliza las clases.

  • 8/6/2019 c sharp 2008

    21/106

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

    Los atributos se especifican encerrandolos entre corchetes:[Version("14/09/2005", Comentario="1.0.1.0")]

    Los atributos son anotaciones que se colocan en elementos de cdigo fuente, comoclases, miembros,parmetros, etc.

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

    El atributo informacin es almacenado con los metadatos del elemento y pueden serfacilmente recuperados en tiempo de ejecucin a travs de un proceso conocido comoreflection.

    C# utiliza un Atributo Condicional para controlar cuando las funciones miembro soninvocadas.

    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 losatributos derivan de System.Attribute.

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

    Identificador Descripcinassembly ensamblemodule mdulotype clase o estructuramethod mtodo

    property porpiedadevent eventofield campoparam parmetroreturn valor de regreso

    Los atributos que son aplicados a ensambles o mdulos deben colocarse despus decualquier clusula using y antes de cualquier cdigo.

    Biblioteca de Clases de la Plataforma .NET

    La 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 programacincomunes como manipulacin de strings, colecciones de datos, conectividad a bases dedatos y acceso a archivos.

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

    Aplicaciones de consola

    Windows Forms

    Aplicaciones ASP.NET

    Servicios Web XML

  • 8/6/2019 c sharp 2008

    22/106

    Servicios Windows

    Requerimientos de Software

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

    Lenguaje Intermedio y MetadatosMicrosoft desarrollo un lenguaje parecido al lenguaje ensamblador llamado MicrosoftIntermediate Language (MSIL).

    Para compilar aplicaciones .NET, los compiladores toman el cdigo fuente comoentrada 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 uncdigo de Lenguaje Intermedio (IL). Este cdigo IL se convierte en la entrada para laadministracin del proceso de ejecucin del CLR. La ventaja final del cdigo IL es queel 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 alruntime del cdigo, por ejemplo la definicin de cada tipo. Los metadatos son

    bibliotecas de tipo, entrada de datos al registry, etc. Los metadatos son empaquetadosdirectamente 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 PEel runtime coloca y extrae los metadatos y el IL de estos.

    Cuando se compila una aplicacin C# o cualquier aplicacin escrita en un CLS, la

    aplicacin es compilada dentro del MSIL, adems se compila dentro de lasinstrucciones nativas de CPU cuando la aplicacin es ejecutada por vez primera por elCLR.

    El proceso es el siguiente:

    1. Cdigo fuente escrito en C#

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

    3. El compilador C# produce como salida el cdigo MSIL y un manifiesto en unaparte 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 funcinllamada _CorExeMain del runtime .NET.

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

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

    El sistema operativo obviamente no puede ejecutar el cdigo MSIL, el punto deentrada es un pequea parte que salta a la funcin _CorExeMain en mscoree.dll.

    6. La funcin _CorExeMain comienza la ejecucin del cdigo MSIL que fuecolocado en el PE.

  • 8/6/2019 c sharp 2008

    23/106

    7. Dado que el cdigo MSIL no puede ser ejecutado directamente (porque no estun un formato de mquina ejecutable) el CLRcompila el MSIL usando uncompilador just-in-time (JIT o JITter) dentro de instrucciones CPU nativas talcomo procesa el MSIL.

    JITers

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

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

    El JIT compila el IL a cdigo nativo y cambia el stub para que apunte al cdigo nativoque 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 encdigo nativo, dependiendo de las circunstancias:

    1. PreJIT (Generacin de cdigo Install-time), opera como un compiladortradicional, aunque est basado sobre el compilador JIT principal, se ejecutacuando un componente NGWS es intalado y compila el cdigo IL a managedcode nativo.

    La generacin de cdigo en tiempo de instalacin compilar un ensamblecompleto dentro de un cdigo binario de CPU-especifico, tal como lo hace elcompilador C++. Un ensamble el cdigo empaquetado que es enviado alcompilador. La compilacin se hace en tiempo de instalacin, cuando el usuariofinal 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 permitecompilar el ensamble completo justo una vez antes de ser ejecutado. Al sercompilado el ensamble entero no hay preocupacin referente al desempeointermitente 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 dedistribucin.

    2. 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 comosalida.

    El JITter es invocado en tiempo de ejecucin.

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

    Tambin es un JITter en tiempo de ejecucin, esta especialmente diseado parasistemas que tienen recursos limitados como memoria. La principal diferenciacon un JIIter regular es la incorporacin de algunas invocaciones code pitching,que permiten al EconoJIT descartar el cdigo generado o compilado si el sistemacomienza a ejecutarse fuera de memoria, siendo el beneficio el reclamo dememoria. La desventaja es que si el cdigo espitched(lanzado) es invocado otravez por lo que debe ser compilado de nuevo.

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

  • 8/6/2019 c sharp 2008

    24/106

    Sistema de Tipo Unificado

    El runtime de .NET hace ms que dar al desarrollador un simple sistema de tipounificado que es usado a travs de todos los lenguajes, tambin deja a los lenguajesescribir extensiones de sistema tipo, agregando nuevos tipos que parezcan y actuencomo tipos de sistemas built.in.

    El Sistema Virtual de Objetos - VOS

    Las reglas que se siguen cuando se declaran, utilizan y administran tipos son modeladasen 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 cuatroreas:

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

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

    3. Common Language Specification - CLS, define el subconjunto de tipos delVOS. Si una biblioteca de clases es soportada por las reglas del CLS, garantizaque la biblioteca de clases pueda ser utilizada por los dems lenguajes queimplementen el CLS.

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

    VOS Type System

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

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

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

    Metadata

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

    Los Metadatos son 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 componentesCOM (Component Object Model).

    La razn para usar metadatos es simple ya que permiten al runtime .NET conocer entiempo de ejecucin que tipos podran ser almacenados y que mtodos podran serinvocados. Esto permite al runtime configurar apropiadamente el ambiente para mayoreficiencia al ejecutar la aplicacin. El significado por el cual estos metadatos sonconsultados es llamado reflection.

    Los metadatos por cada objeto .NET registran toda la informacin que es requerida parausar el objeto, con esta informacin el runtime .NETes capaz de resolver como crearobjetos, invocar funciones miembro o acceder a los datos de un objeto y el compilador

  • 8/6/2019 c sharp 2008

    25/106

    puede utilizar la informacin para encontrar que objetos estn disponibles y como esutilizado 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 ynombres

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

    Existe un proceso llamado reflection donde el cdigo en tiempo de ejecucin puedeconsultar los metadatos para encontrar que objetos estn disponibles y que funciones ycampos estn presentes en la clase. La reflection est disponible para usuarios finales

    para determinar como son los objetos, bsqueda de atributos o ejecutar mtodos en losque 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 quela informacin acerca de los tipos es persistente.

    Una herramienta que toma ventaja de reflection es el ILDASM (Microsoft .NETFramework IL Disassembler), el cual analiza la aplicacin de metadatos fuente yentonces presenta informacin acerca de la aplicacin en la jerarqua del rbol.

    Seguridad

    La faceta ms importante de cualquier ambiente de desarrollo de aplicacionesdistribuidas es como manejar la seguridad.

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

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

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

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

    Si una aplicacin de instalacin intenta sobre escribir un archivo necesario para otraaplicacin, el runtime .NET es lo bastante inteligente para permitir que la aplicacin de

  • 8/6/2019 c sharp 2008

    26/106

    instalacin, instale los archivos necesarios pero el CLR no elimina las versiones previasde el archivo porque todava son requeridas por la primer aplicacin.

    Interoperabilidad con cdigo no administrado

    El cdigo no administrado no tiene las ventajas que tiene el cdigo administrado, comorecoleccin de basura, sistema de tipo unificado y metadatos.

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

    Cdigo administrado usando componentes COM, es posible lograr estocreando un wrapper .NET para el componente COM, as que el clienteadministrado 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 quese ejecutan en el CLR.

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

    El CLS define un subconjunto de tipos del VOS, si una biblioteca de clases sigue lasreglas 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 - VES

    El Sistema Virtual de Ejecucin implementa la VOS y se crea implementando un motorde ejecucin (Execution Engine EE). Los componentes de la VES son:

    Lenguaje Intermedio ( Intermediate Language - IL), diseado para serfacilmente traducido a una amplia gama de lenguajes, por lo que el compiladorC# 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 compilacinJIT. La class loaderforza la seguridad.

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

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

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

  • 8/6/2019 c sharp 2008

    27/106

    Servicios de debugging, estos servicios dependeran de la informacinproducida por el compilador del lenguaje fuente y se emiten dos mapas, un mapadel lenguaje fuente de la construccin de direcciones en el flujo de instruccionesy 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 Datos

    C# 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 .NETsubyacente.

    Todos los tipos runtime pueden encontrarse en el namespaceSystem del lenguaje comnen tiempo de ejecucin .NET.

    Tipo Bytes Tipo runtime Descripcinbyte 1 Byte Unsigned byte

    sbyte 1 SByte Signed byteshort 2 Int16 Signed short

    ushort 2 UInt16 Unsigned short

    int 4 Int32 Signed integer uint 4 UInt32 Unsigned intlong 8 Int64 Signed big integer

    ulong 8 UInt64 Unsigned big integer float 4 Single Floating point number

    double 8 double Double-precision floating point number

    decimal 8 Decimal Fixed-precision number string String Unicode stringchar Char Unicode character

    bool Boolean Boolean value

    Los tipos de datos son separados en value types y reference types. Los value types sonasignados en estructuras de pilas o en lnea. Los reference types son asignados alaglomerado.

    Las referencias y tipos de valores son derivados de la ltima clase base objet, de estamanera en caso de que un tipo de valor necesite actuar como un object una envoltura

    hace que el tipo de valor parezca una referencia asignandolo al aglomerado, y los tiposde valores son copiados a estos. La envoltura es marcada por lo que el sistema conoceque contiene por ejemplo int, a este proceso se le conoce comoboxing y el proceso dereversa se le conoce como unboxing

    La palabra reservada class es empleada para declarar un tipo referencia (heapallocated), y la palabra reservada struct es empleada para declarar un tipo valor, unaestructura es utilizada para objetos ligeros que necesitan actuar como tipos built-in, lasclases son utilizadas en cualquier otro caso.

    Por ejemplo un tipo int es un valor tipo y un tipo string es un tipo referencias, estotrabajaria as:

    int i = 2005;string s = "Septiembre";

  • 8/6/2019 c sharp 2008

    28/106

    i 2005

    s o-----------------> Septiembre

    Constantes y Campos Solo LecturaEn C# los valores pueden ser definidos como constantes y para que un valor seaconstante 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, envez de ello es posible utilizar el modificadorreadonly el cual est diseado paraaquellas situaciones en donde las constantes tienen restriccin.

    Aplicando el modificadorreadonly un valor puede ser establecido en el constructor oen una inicializacin pero no puede ser modificado despus.

    Ejemplo Hello World!

    El cdigo C# puede ser escrito en cualquier editor, tambin puede escribirse con VisualStudio 7.

    El cdigo C# debe almacenarse en un archivo con extensin .cs

    Para compilar el cdigo C# es necesario tener instalado la Plataforma .NET que incluyeel compilador C#, puede buscar el ejecutable en la ruta:C:WINDOWSMicrosoft.NETFrameworkv1.1.4322 csc.exe

    Asegurese de tener esta ruta en el path para poder ejecutar el compilador desdecualquier ubicacin.

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

    La salida exitosa de la compilacin podra ser as:

    Microsoft (R) Visual C# .NET Compiler version 7.10.6001.4for Microsoft (R) .NET Framework version 1.1.4322Copyright (C) Microsoft Corporation 2001-2002. All rights

    reserved.

    Si existe algn error el compilador lo notificar. El archivo es compilado y ligado a

    helloworld.exe, (el archivo .exe generado tendr el nombre del archivo fuente) paraejecutar el programa slo es necesario escribir el nombre del archivo ejecutable.

    Algo interesante es que es posible especificar el nombre del archivo ejecutable a travsde un switch:

    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");

    }

    }

  • 8/6/2019 c sharp 2008

    29/106

    El mtodo Main debe estar contenido en la clase y escrito con la primer letra enmayscula. El tipo de este mtodo puede servoid o int. Tambin este mtodo puedeespecificar argumentos:

    public static void Main(string[] args)

    System es el mbito del namespace en el cual el objeto Console est contenido.

    Es posible importar el namespace en las aplicaciones indicandolo al inicio del cdigocon la palabra reservada using que es una directiva para el namespace System. Existenms namespaces en la Plataforma .NET

    using System;

    Ejemplo Args

    Examinemos el siguiente ejemplo, el cual recibe los argumentos con los que elcomponente fue invocado:

    Ejemplo de Args con for:

    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 con foreach:

    using System;class App{

    public static void Main(string[] args){foreach(string input in args){

    Console.WriteLine(input);}

    }}

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

    using permite al usuario omitir el namespace al utilizar el tipo al que es

    referenciado en este caso System, por lo que en vez de escribir:System.Console.WriteLine();

    Solamente se escribe:Console.WriteLine();

    using no puede ser utilizado con un nombre de clase por lo que no es permitidoescribirusing System.Console

    class Args, Al no existir las funciones globales en C#, se declara una clasellamada Args.

    public static void Main(string[] args), La clase Args contiene una

    funcin o mtodo Main(), el cual sirve como punto de partida de la ejecucindel componente, este mtodo puede o no ser declarado con argumentos, en este

  • 8/6/2019 c sharp 2008

    30/106

    caso es fundamental declarlos porque deseamos precisamente leer y escribirestos 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 llamado args

    Console.WriteLine("Argumentos : {0}", args.Length);, invoca elmtodo WriteLine de la clase Console para escribir en la lnea de comando loque se indica entre los parntesis.

    La primer parte de lo que se encierra entre parntesis es un string donde esnecesario destacar que{0}, es una notacin que indica entre llaves un ndice quehace referencia a una variable asociada a este, en este caso asociada conargs.Length

    args.Length, Length es un mtodo de la clase args el cual obtiene el nmerode elementos que contiene este arreglo.

    El ciclo for comienza una iteracin desde 0 hasta el nmero de elementos quecontiene el arreglo args.Length, por cada elemento contenido en el arregloescribe en la lnea de comandos lo que se indica en ("Argumento {0} : {1}",itera, args[itera]) que como mencionamos anteriormente {0} hacereferencia al orden en que las variables sern escritas, en este caso correspondeal iterador y {1} corresponde a args[itera], lo cual indica obtener el elementoen cuestin del arreglo args.

    Para compilar el componente utilice csc Args.cs

    Para ejecutar el componente sin parmetros escriba en la lnea de comando: cscArgs

    Salida : Argumentos : 0 Para ejecutar el componente con parmetros escriba en la lnea de comando:

    csc Args p1 p2 p3 p4 p5 p6 ... pn

    Por ejemplo: args http : www . informatique . com . mx

    Salida :Argumentos : 8Argumento 0 : httpArgumento 1 : :Argumento 2 : wwwArgumento 3 : .

    Argumento 4 : informatiqueArgumento 5 : .Argumento 6 : comArgumento 7 : .Argumento 8 : mx

    Ejemplo Input/Output

    Es posible leer datos de la consola utilizando el mtodo ReadLine y es posiblemostrarlos utilizando el mtodo Write o WriteLine del objeto Console:

    using System;class inOut{

    public static void Main(){Console.Write("Fecha de Nacimiento: ");String strFecNac = Console.ReadLine();

  • 8/6/2019 c sharp 2008

    31/106

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

    }

    Note que importar la directiva System hace posible omitir escribir el namespace, de estaforma slo es necesario escribir el nombre del objeto seguido del nombre del mtodo.

    Ejemplo String Format

    Es 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);}

    }

    Funcin Main

    Es posible incluir una funcin esttica en la clase para poder probarla, en C# estafuncin esttica puede ser escrita como Main() 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 funcin Main como void lo cual indica que no regresa unvalor, pero es posible indicar que si regrese un valor escribiendo el tipo de la funcincomo int por 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 funcin Main reciba parmetros de la lnea de comandos,para ello es necesario especificar un arreglo de strings como parmetro:

  • 8/6/2019 c sharp 2008

    32/106

    using System;class App{

    public static void Main(string[] args){foreach(string input in args){

    Console.WriteLine(input);}

    }}

    Mltiples Funciones Main

    Es posible que existan en una aplicacin varias clases que contengan la funcin Main()y por ello al compilar se indicar un error.

    Para evitar el error o indicar que funcin Main() de que clase deseamos que se ejecute,es necesario utilizar el siguienteswitch al compilar:/main:nombreClase

    Por ejemplousing 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:ClaseB

    Salida: Main de la clase B

    Preprocesamiento

    Lo ms importante en este punto es que en C# no existe el preprocesador, el motivopor el cual no existe es para simplificar la estructura de compilacin adems de que nohay necesidad de escribir un archivo de encabezados por separado y mantener ensincronia la implementacin, cuando los archivos fuente C# son compilados el orden dela compilacin de archivos individuales no es importante y es equivalente a un archivode gran tamao.Un identificador es el nombre que es usado para algn elemento de un programa comouna variable o funcin y deben tener una letra o guin bajo como primer caracter.

    C# soporta las siguientes directivas de preprocesamiento:

    Tamao Valor

    #define Define un identificador, los identificadores tambin puedenser definidos via la lnea de comando

    #undef Elimina la definicin de un identificador

    #if

    El cdigo de la seccin es compilado si la expresin esverdadera

  • 8/6/2019 c sharp 2008

    33/106

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

    #else Si la directiva anterior no se cumplio el cdigo de la seccines compilado

    #endif Marca 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.Comentarios

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

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

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

    Value Types

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

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

    C# agrupa los value types en:

    1. Tipos Simples

    2. Tipos Estructura

    3. Tipos Enumeracin

    Tipos Simples

    Los Tipos Simples de C# comparten caractersticas como las de alias con los tipos desistema de .NET, expresiones constantes consisten de Tipos Simples evaluados

    solamente en tiempo de compilacin no en tiempo de ejecucin y los Tipos Simplespueden ser inicializados con literales.

    Los Tipos Simples de C# se agrupan en:

    Integral

    Representa valores enteros y existen nueve tipos integralen C#:

    Tipo Tamao Valor

    sbyteEntero consigno 8 bit -128 a 127

    byte

    Entero sin

    signo 8 bit 0 a 255short Entero con 16 bit -32,768 a 32,767

  • 8/6/2019 c sharp 2008

    34/106

    signo

    ushort Entero sinsigno

    16 bit 0 a 65,535

    int Entero consigno

    32 bit -2,147,483,648 a 2,147,483,647

    uint Entero sinsigno

    32 bit 0 a 4,294,967,295

    long Entero consigno

    64 bit -9,223,372,036,854,775,808 a-9,223,372,036,854,775,807

    ulongEntero sinsigno 64 bit 0 a 18,446,744,073,709,551,615

    Bool

    Representa 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 diferentede cero, no hay una conversin entre el tipo integral a bool que force estaconversin.

    Char

    Representa un caracter Unicode de 16 bit de tamao, por ejemplo:char cSexo = 'M';

    Tambin es posible asignar un valor hexadecimal utilizando la secuencia de

    escapex o un valor Unicode con la secuencia de escapeu:char cHexadecimal = 'x0068';char cUnicode = 'u0068';

    No existen conversiones implicitas de char a otro tipo de datos disponible, estosignifica por ejemplo que tratar de convertir una variable char a un tipo de datointegral no es posible en C#, por lo que se tendr que hacer un castexplicito:

    char cCaracter = (char)65;int nNumero = (int)'A';

    Floating Point

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

    Tipo Valor

    float 1.5x10-45 a 3.4x1038 con una precisin de 7 dgitosdouble 5.0x10-324 a 1.7x10308 con una precisin de 15-16 dgitos

    Al realizar operaciones conFloating Pointpueden producirse los siguientesvalores:

    Cero positivo y negativo

    Infinito positivo y negativo

    NaN,Not-a-Number

  • 8/6/2019 c sharp 2008

    35/106

    Nota: Si una expresin un valor es de tipoFloating Pointtodos los otros valoresson convertidos a tiposFloating Pointantes de realizar el clculo.

    Decimal

    Representa un tipo de alta precisin de 128 bit el cual es posible utilizarlo paracalculos financieros y monetarios. Los valores posibles comprenden los rangos1.0x10-28 a 7.9x1028 con una precisin de 28 a 29 dgitos.

    No hay conversiones implicitas entre decimales y dobles, se podra generar unoverflow o perder precisin, por lo que es necesario una conversin explcita conun cast.

    Cuando se define una variable y se le asigna un valor se utiliza el sufijo m paradenotar que es un valor decimal:decimal decDecimal = 1.0m

    Si se omite la letra m la variable podra ser tratada como double por elcompilador antes de ser asignado.

    Tipos EstructuraUn tipo struct puede declarar constructores, constantes, campos, mtodos,

    propiedades, ndices, operadores y tipos anidados. Las estructuras actuan de manerasimilar a una clase y con mayores restricciones, por ejemplo no pueden heredar decualquier otro tipo, ni tampoco otra clase puede heredar de una estructura.

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

    La diferencia entre struct y class en C# es que struct es un value type y class esuna reference type.

    La principal idea de utilizarstruct es para crear objetos ligeros como Point,FileInfo, etc., de esta manera se conserva memoria porque no hay referenciasadicionales 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 Enumeracin

    Es posible establecer un conjunto de constantes relacionadas, por default los elementosde una enumeracin son de tipo int donde el primer elemento tiene el valor0 y cadaelemento subsecuente se incrementa en 1. Es posible establecer el valor del primerelemento simplemente asignando a este el valor deseado, as como es posibleespecificar el tipo de dato de los valores contenidos especificandolo despus del nombre

    de la enumeracin aunque estn restringidos a los tipos: long, int, short y byte.Sintaxis:

  • 8/6/2019 c sharp 2008

    36/106

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

    Los Tipos Base para las enumeraciones se especifican listando el tipo base despus delnombre 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, long y ulong.

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

    Tipos Referencia

  • 8/6/2019 c sharp 2008

    37/106

    Es contraste a value types los reference types no almacenan el dato actual querepresentan, porque almacenan una referencia al dato actual.

    Los reference types que C# utiliza son:

    Tipo Objeto

    Tipo Clase Interfaces

    Delegados

    Tipo string

    Arreglos

    Tipo Objeto

    El Tipo Objeto es la Clase Base de todos los tipos, al ser la clase base de todos los tiposes posible asignarle valores de cualquier tipo.

    El Tipo Objeto es utilizado cuando el value type esta boxed, es decir, que estdisponible como un objeto.Tipo Clase

    El Tipo Clase contiene datos miembro, funciones miembro y tipos anidados. Los datosmiembro son constantes, campos y eventos. Las funciones miembro incluyen mtodos,

    propiedades, ndices, operadores, constructores y destructores.

    Interfaces

    Una interface declara un tipo referencia que tiene slo miembros abstractos. Slo existela firma pero no tiene implementado todo el cdigo, por lo que no es posible instanciaruna interface, slo un objeto que deriva de la interface. Para crear una interface se

    emplea la palabra reservada interface: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 unaClase es posible derivar de mltiples interfaces, mientras que al definir una interfaceslo es posible derivar de slo una clase.

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

    Cuando un objeto implementa una interface, una referencia a la interface puede serobtenida por un castde la interface.

  • 8/6/2019 c sharp 2008

    38/106

    Una clase puede implementar ms de una interface.class NombreClase : InterfaceA, InterfaceB{}

    Existe una tcnica llamadaImplementacin de la Interface Explcita y se utiliza pararesolver 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 elnombre del mtodo Iuno");

    }void Idos.AccionUno(){

    Console.WriteLine("Colisin resuelta con elnombre 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 comotambin es posible crear interfaces basadas de otras interfaces.

    Delegados

    Los delegados son similares a las interfaces, especifican un contratado entre un calleryun implementer(implementador).

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

    Lasinterfaces se crean en tiempo de compilacin y los delegados son creados en tiempode ejecucin.

    Un delegado encapsula un mtodo con cierta firma, bsicamente un delegado es untype-safe ysecure version. Un delegado es una implementacin defunction pointersorientada a objetos y son utilizados en muchas situaciones donde un componentenecesita 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 deldelegado, 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 clase Ordenamiento soporte

  • 8/6/2019 c sharp 2008

    39/106

    diferentes mtodos de ordenacin, la ordenacin podra ser controlada en base a undelegado que defina la funcin de comparacin.

    Nota los delegados siempre son creados an si no son usados, pero los delegadospodran 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 string

    El Tipo string se utiliza para manipular datos string. La clase string derivadirectamente de object y no es posible derivarla.

    Todos los strings en C# son instancias del tipo System.String en el CLR.

    string es un alias para la clase predefinida System.String y 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 el string utilizando lapropiedad Length que poseen los arreglos y porque es posible acceder a estos tratandoal string como 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 ==

    Aunque string es un reference type la comparacin se realiza comparando los valoresno las referencias.

    La clase String es un ejemplo de tipo inmutable, es decir, que los caracteres contenidosen el string no puede ser modificados por los usuarios del string, todas las operaciones

    que son realizadas por la clase String regresan una versin modificada del string envez de modificar la instancia en la cual se invoco el mtodo.

    La clase String soporta los sisguientes mtodos de comparacin y bsqueda:

    Mtodo DescripcinCompare() Compara dos strings.

    CompareOrdinal()Compara dos regiones de strings utilizando unacomparacin 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 unstring.

  • 8/6/2019 c sharp 2008

    40/106

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

    Concat()Concatena dos o ms strings u objetos, si se pasan objetosla funcin ToString es invocada

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

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

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

    PadLeft() Alinea a la izquierda un stringPadRight() Alinea a la derecha un stringRemove() Elimina caracteres de un string

    Replace() Reemplaza todas las instancias de un caracter con

    caracteres diferentesSplit() Crea un arreglo de strings dividiendo un string en cualquier

    ocurrencia de uno o ms caracteresSubstring() Extrae un substring de un stringToLower() regresa una versin de un string en minsculasToUpper() regresa una versin de un string en maysculasTrim() Elimina espacios en blanco de un stringTrimEnd() Elimina un string de caracteres al final de un stringTrimStart() 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 otrostring.

    La clase StringBuilder soporta las siguientes propiedades y mtodos:

    Propiedad Descripcin

    CapacityRecupera o establece el nmero de caracteres queStringBuilder puede contener

    []ndice StringBuilder utilizado para obtener o establecer uncaracter en la posicin especfica

    Length Recupera o establece la longitudMaxCapacity Recupera la capacidad mxima del StringBuilder

    Mtodo DescripcinAppend() Agrega la representacin string de un objeto

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

    EnsureCapacity()Asegura que StringBuilder tiene suficiente espacio paraun nmero de caracteres especfico

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

  • 8/6/2019 c sharp 2008

    41/106

    Remo