Post on 08-Apr-2018
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