Está en la página 1de 63

Tutorial de C#

Programacin OO
Por: scar Lpez, M.Sc.
olopez@uniandino.com.co

Hola Mundo!
1.

using System;

2.

namespace HolaMundo {
/// <summary>
/// Summary description for Hola.
/// </summary>
class Hola {

3.
4.
5.
6.

/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main() {
Console.WriteLine(Hola Mundo!);
}

7.
8.
9.
10.
11.
12.
13.
14.

15.
16.

}
OALP-2004 All Rights Reserved

CREACIN DE OBJETOS

OALP-2004 All Rights Reserved

Clases - Roles y Funciones

Generador de nuevos objetos


Descripcin de la representacin de sus instancias
Descripcin del protocolo de mensajes de sus instancias
Elemento de la descripcin de la taxonoma de un objeto
Un medio para implementar programacin diferencial
Repositorio de mtodos para recibir mensajes
Artefacto para actualizar muchos objetos cuando ocurre
un cambio
Conjunto de todas las instancias de una clase

OALP-2004 All Rights Reserved

Clases - Definicin
[[atributos]] [modificadores]
class identificador [: base,]
{cuerpo clase}

Atributos: anotaciones usadas para proporcionar meta-

datos sobre la clase


Identificador: nombre, notacin de Pascal
Base: Clase, Clase Abstracta, Interfaz(ces). Atencin:
slo una clase, y las interfaces van al final

OALP-2004 All Rights Reserved

Modificadores de Clase
Modificador

Comentario

new

Slo aplica para clases anidadas,


las esconde

abstract

Declara la clase como abstracta

internal

Declara una clase anidada

sealed

Declara la clase como sellada


OALP-2004 All Rights Reserved

Modificadores de Acceso
Modificador
public
private
protected
internal
protected
internal

Comentario
Sin restricciones. Visible desde cualquier
mtodo de cualquier clase
Slo es visible desde los mtodos de la
misma clase
Visible desde los mtodos de una clase y
todas sus sub-clases
Visible desde los mtodos de todas las
clases dentro de un mismo ensamblaje
Visible desde los mtodos de una clase,
sus sub-clases, y todas las clases en su
mismo ensamblaje
OALP-2004 All Rights Reserved

Aplicabilidad de Modificadores de Acceso


Categora

Modificadores Aplicables

Acceso por
Defecto

espacios de
nombres

(implcito) public

public

clases, interfaces,
estructuras

public, internal

internal

miembros de
clase (incluyendo
tipos anidados)

public, protected,
internal, protected
internal, private

private

miembros de
estructura

public, internal,
private

private

miembros de
interfaz

(implcito) public

public

miembros de
enumeracin

(implcito) public

public

OALP-2004 All Rights Reserved

Instanciacin - Palabras Clave


new

crea nuevas instancias de una clase o una


estructura

this

referencia a la instancia actual de un objeto

base

referencia a la super-clase de un objeto


OALP-2004 All Rights Reserved

Constructores de Instancia
El nombre del constructor debe ser el
mismo del nombre de la clase
No tienen un tipo de retorno
Si no se especifica, se crea un constructor
por defecto
Los constructores se pueden sobrecargar
y pueden llamar a otros constructores
dentro de la misma clase o en una superclase

OALP-2004 All Rights Reserved

Constructores de Instancia - Ejemplo


1.

public class Window {


int top, left;

2.
3.

public Window(int top, int left) {


this.top = top;
this.left = left;
}

4.
5.
6.
7.
8.

9.

public class ListBox : Window {

10.

string mListBoxContents;

11.

ListBox(int top, int left, string theContents)


: base(top, left) {
mListBoxContents = theContents;
}

12.
13.
14.

ListBox(int top, int left)


: this(top, left, ) {
}

15.
16.
17.
18.

}
OALP-2004 All Rights Reserved

Constructores Estticos

1.

No puede tener parmetros


No puede tener modificadores de acceso
No puede ser llamado explcitamente
Es llamado una sola vez, antes de crear la primera instancia

public class Window {


static GLibrary gLib;

2.

static Window() {
gLib = getLib();
}

3.
4.
5.
6.

OALP-2004 All Rights Reserved

Inicializadores, Valores por Defecto


int num = -1;

Tipo
Numrico (int, long, etc.)
bool
char
enum
referencia

Valor por Defecto


0
false
\0
0
null

OALP-2004 All Rights Reserved

Destructores

1.
2.
3.

Recolector de Basura!
Normalmente no son necesarios, slo si se deben liberar recursos
costosos
Los destructores se llaman cuando un objeto es recolectado, es un
proceso no-determinstico
No se pueden llamar explcitamente (pero un objeto se puede marcar
para ser recolectado asignndole null)

~Window() {
gLib.release();
}

1. protected override void Finalize() {


2.
try {
3.
gLib.release();
4.
}
5.
finally {
6.
base.Finalize();
7.
}
8. }
OALP-2004 All Rights Reserved

Implementando IDispose
1.

using System;

2.
3.

class TestDispose : IDisposable {

4.

bool isDisposed = false;

5.

protected virtual void MyDispose() {


if ( !isDisposed ) { // slo limpiar una vez!
Console.WriteLine(Limpiando...); // realizar la limpieza
}
this.isDisposed = true;
}

6.
7.
8.
9.
10.

public void Dispose() {


MyDispose();
// decirle al recolector que no debe llamar al destructor
GC.SuppressFinalize(this);
}

11.
12.
13.
14.
15.

~TestDispose() {
MyDispose();
}

16.
17.
18.
19.

}
OALP-2004 All Rights Reserved

Declaracin using

Debido a que no hay seguridad de que


Dispose() sea llamado, C# proporciona la
declaracin using, la cual garantiza que
Dispose() sea llamado automticamente
cuando se llega al corchete que cierra la
declaracin
1.
2.
3.
4.

Font theFont = new Font(Arial, 10.0f);


using (theFont) {
// usar theFont
} // el compilador invocar Dispose() en theFont

OALP-2004 All Rights Reserved

Clases Anidadas

Tpicamente, existe slo para servir a la clase


que la contiene, como una clase auxiliar
Puede ocultarse de otras clases si se declara
como privada
Una clase anidada tiene acceso a todos los
miembros de la clase que la contiene, an los
privados
Puede acceder a todos los miembros externos
que puedan ser accedidos por la clase que la
contiene
OALP-2004 All Rights Reserved

Clases Anidadas - Ejemplo


1.
2.
3.
4.
5.
6.
7.

public class Fraction {


internal class FractionPaint {
public void Draw(Fraction f) {
Console.WriteLine(Drawing Fraction);
}
}
}

Fraction f1 = new Fraction(3,4);


Fraction.FractionArtist fp = new Fraction.FractionPaint();

fp.Draw(f1);

OALP-2004 All Rights Reserved

Estructuras
[[atributos]] [modificadores acceso]
struct identificador [: interfaz,]
{cuerpo estructura}

Otro tipo de datos definido por el usuario


Una alternativa liviana a las clases (menos memoria, menos
funcionalidad)
Pueden tener: constructores, propiedades, mtodos, campos,
operadores, tipos anidados y propiedades indexadas; pueden
implementar interfaces; se les reserva memoria al declararlas
No soportan destructores ni herencia, no pueden tener un
constructor sin parmetros ni usar inicializadores; sus instancias
son de tipo valor (a diferencia de las instancias de una clase, que
son de tipo referencia)

OALP-2004 All Rights Reserved

Estructuras - Para Qu?

Deberan usarse para tipos pequeos, simples, con


comportamiento y caractersticas similares a las de los
tipos bsicos. Ej.: un Punto con coordenadas (x, y)
Las operaciones sobre estructuras pueden ser ms
rpidas en algunos casos, pero las asignaciones son
ms costosas
Encapsular los miembros hacindolos privados y
accedindolos usando propiedades o mtodos es
exagerar en este caso acceder directamente al
estado de una estructura es ms razonable
Es ms eficiente usar estructuras en Arreglos que en
Colecciones

OALP-2004 All Rights Reserved

Estructuras - Ejemplo
1.

using System;

2.

public struct Point {


int x, y;

3.

public Point(int xCoordinate, int yCoordinate) {


x = xCoordinate;
y = yCoordinate;
}

4.
5.
6.
7.
8.

9.

public class Tester {


static void Main() {
Point p1 = new Point(300,200);
Point p2;
p2.x = 640;
p2.y = 480; // No olvidar asignar todos los campos
}
}

10.
11.
12.
13.
14.
15.
16.

OALP-2004 All Rights Reserved

COMPARTIR INFORMACIN

OALP-2004 All Rights Reserved

Herencia

En C#, una clase slo puede tener una superclase, y todas las clases heredan de
System.Object

Una sub-clase hereda todos los miembros


visibles de su super-clase, y son tratados como
si hubieran sido definidos en la sub-clase
Las siguientes clases no pueden ser extendidas:
System.Array
System.Delegate
System.Enum
System.ValueType

OALP-2004 All Rights Reserved

Mtodos de System.Object
Mtodo

Comentario

public virtual string


ToString()

representacin textual del objeto

public virtual int


GetHashCode()

hash del objeto

public virtual bool


Equals(object a)

prueba igualdad entre objetos

public static bool


Equals(object a,object b)

prueba valores nulos, luego igualdad

public static bool


ReferenceEquals(object a,object b)

prueba identidad

public Type
GetType()

instancia de Type del objeto

protected object
MemberwiseClone()

copia superficial

protected virtual
Finalize()

limpieza
OALP-2004 All Rights Reserved

Polimorfismo

Capacidad de usar muchas formas de un


mismo tipo
Un miembro debe ser declarado explcitamente
como virtual para poder declarar override
sobre ste en una sub-clase
Un miembro virtual no puede ser declarado
como: static, abstract, override o private
Slo los siguientes miembros pueden ser
declarados como virtual: mtodos,
propiedades y propiedades indexadas
OALP-2004 All Rights Reserved

Uso de virtual y override


Una sub-clase no puede hacer override de
los miembros privados de una super-clase
Si una sub-clase tiene un mtodo con la
misma firma de un mtodo privado en una
super-clase, no se considera un override
El que un miembro de una clase sea
declarado como virtual no obliga a que sus
(posibles) sub-clases deban hacer
override de ste

OALP-2004 All Rights Reserved

Escondiendo Miembros con new


new

como modificador, al crear un nuevo miembro


de clase (mtodo, campo, constante, propiedad,
tipo) que esconde el miembro heredado de
una super-clase

Una sub-clase es libre de implementar su propia


versin de un miembro de una super-clase. La
palabra clave new indica que la sub-clase,
intencionalmente, ha escondido y reemplazado
un miembro de su super-clase

OALP-2004 All Rights Reserved

Escondiendo Miembros - Ejemplo


1.

using System;

2.

class A {
public virtual void DoThis() {
Console.WriteLine(A);
}
}

3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.

class B : A { // B extiende A
public new void DoThis() {
Console.WriteLine(B);
}
}
class Test {
public static void Main() {
A temp1 = new A();
temp1.DoThis();
B temp2 = new B();
temp2.DoThis();
A temp3 = new B();
temp3.DoThis();
A temp4 = (A)temp2;
temp4.DoThis();
}
}

Cuando se usa new, el tipo de


dato de la variable usada para
referenciar un objeto se toma en
cuenta a la hora de determinar
cul de los dos mtodos invocar.
Si la variable es de tipo A, no
importa si la instancia a la que se
refiere es de clase A o B, se
llama el mtodo DoThis() en A.
No se trata de un override de B,
simplemente, se lo ha
escondido

OALP-2004 All Rights Reserved

Clases Abstractas

Obligan a que las subclases implementen uno o


ms mtodos
No se pueden instanciar
Si una clase tiene un solo mtodo abstracto,
sta tambin debe declararse como abstracta
Se antepone la palabra clave abstract a la
definicin de un mtodo, no se implementa
Tpicamente, se encuentran en la parte superior
de una jerarqua de clases
OALP-2004 All Rights Reserved

Clases Selladas

Lo opuesto a una clase abstracta


No permite que una clase tenga sub-clases
Se antepone la palabra clave sealed a la
definicin de una clase
Se marcan como tal para prevenir herencia
accidental
Se debera marcar como sellada una clase en
donde todos sus miembros son estticos

OALP-2004 All Rights Reserved

Interfaces
[[atributos]] [modificadores acceso]
interface identificador [: interfaz,]
{cuerpo interfaz}

Un contrato, un conjunto de capacidades ofrecidas por un objeto


En C#, una interfaz puede contener mtodos, propiedades,
propiedades indexadas y eventos; no campos
Debe detallar el tipo de retorno, el nombre y los parmetros de un
mtodo, sin especificar modificadores de acceso
Una interfaz no puede ser instanciada
Una clase puede implementar una o ms interfaces
Por convencin, su nombre empieza por I

OALP-2004 All Rights Reserved

Conversiones de Interfaces - is, as

IStorable isDoc = (IStorable) doc;

if (doc is IStorable)
IStorable isDoc = (IStorable) doc;

IStorable isDoc = doc as IStorable

OALP-2004 All Rights Reserved

Qu Define a un Objeto?

Estado

Comportamiento

Identidad

Eventos
OALP-2004 All Rights Reserved

Posibles Miembros de una Clase

Estado

Campos
Constantes
Campos de slo lectura
Enumeraciones

Comportamiento

Constructores de instancia
Constructores estticos
Destructores
Tipos anidados
Propiedades
Propiedades Indexadas
Mtodos
Operadores
Delegados y Eventos
OALP-2004 All Rights Reserved

Miembros de Clase y de Instancia

Los siguientes miembros pueden ser declarados como


estticos, usando la palabra clave static: constructores,
campos, campos de slo lectura, propiedades, mtodos,
operadores, eventos
Los miembros de instancia estn asociados con
instancias de un tipo
Los miembros estticos estn asociados con una clase y
no con una instancia en particular y como tal, se
acceden anteponiendo el nombre de la clase y el
operador . al nombre del miembro
Un miembro esttico no puede ser declarado con
ninguno de stos modificadores: virtual, override,
abstract
OALP-2004 All Rights Reserved

ESTADO

OALP-2004 All Rights Reserved

Campos

Variable asociada a una instancia o a una clase,


almacena los datos que definen las
caractersticas propias de un objeto. No
confundir con atributos ni con propiedades
Por convencin, todos los campos son privados.
Si se necesita proporcionar acceso a stos, se
recomienda usar propiedades
Tambin por convencin, se recomienda usar la
convencin Camel para los nombres de los
campos (primera letra en minsculas, palabras
separadas por una letra mayscula)
El nombre de un campo no puede ser una
palabra reservada
OALP-2004 All Rights Reserved

Constantes

Representan valores que no cambian durante la


ejecucin del programa
Se declaran usando la palabra clave const
Pueden ser de tipos valor (sbyte, byte,

short, ushort, int, uint, long, ulong,


float, double, decimal, bool, char) y
string

Pueden ser variables o campos de instancia


Son evaluadas en tiempo de compilacin

// Nmero de milisegundos en un da
const long MS_POR_DIA = 1000*60*60*24;
OALP-2004 All Rights Reserved

Campos de Slo Lectura

Se declaran usando la palabra clave readonly


Son ms generales que las constantes
Pueden ser de cualquier tipo que sea evaluado una y
slo una vez en tiempo de ejecucin
Tpicamente, son inicializados al momento de cargar
una clase (en el caso de campos estticos) o al
momento de inicializar una instancia (para los campos
de instancia)
No slo se pueden aplicar a campos constantes: se
pueden usar para datos que, una vez son asignados,
son invariantes (Ej., una cdula)
No confundir: un campo de slo lectura no es inmutable;
cuando se aplica a un tipo referencia, slo impide que la
referencia al objeto sea cambiada
OALP-2004 All Rights Reserved

Campos de Slo Lectura - Ejemplo


2.

using System;
using System.Threading;

3.

public class ReadOnly {

1.

int id;
readonly DateTime timeOfInstanceCreation = DateTime.Now;
static readonly DateTime timeOfClassLoad = DateTime.Now;
static readonly ReadOnly ro = new ReadOnly();

4.
5.
6.
7.

11.

public ReadOnly() {
Console.WriteLine(Clase cargada: {0}, Instancia creada: {1},
timeOfClassLoad, timeOfInstanceCreation);
}

12.

public static void Main() {

8.
9.
10.

const int size = 10;


for (int i = 0; i < size; i++) {
new ReadOnly();
Thread.Sleep(1000);
}

13.
14.
15.
16.
17.

// Se puede cambiar un miembro


ro.id = 5;
Console.WriteLine(ro.id);
Console.ReadLine();

18.
19.
20.
21.

// El compilador dice a static readonly field cannot be assigned to


// ro = new ReadOnly();

22.
23.

24.
25.

OALP-2004 All Rights Reserved

Enumeraciones
[[atributos]] [modificadores]
enum identificador [: base]
{lista de enumeracin,}

Proporcionan una alternativa al uso de constantes


Permiten agrupar constante relacionadas lgicamente
Son un tipo valor; consisten en un conjunto de
constantes con nombre (denominadas la lista de
enumeracin)
La base es el tipo usado por debajo para representar la
enumeracin. Puede ser cualquiera de los tipos enteros
excepto char
Si no se especifica una base, por defecto se utiliza int
OALP-2004 All Rights Reserved

Enumeraciones

1.
2.
3.
4.
5.
6.

Cada elemento de una enumeracin


corresponde a un valor numrico. Por defecto,
una enumeracin empieza en 0 y cada valor
siguiente aumenta una unidad respecto al
anterior
enum algunosValores {
Primero,
// 0
Segundo,
// 1
Tercero = 20, // 20
Cuarto
// 21
}
OALP-2004 All Rights Reserved

Enumeraciones - Ejemplo
1.

using System;

2.

class Values {

3.

// declaracin de la enumeracin

4.

enum Temperatures : int {


WickedCold = 0,
FreezingPoint = 32,
LightJacketWeather = 60,
SwimmingWeather = 72,
BoilingPoint = 212
}

5.
6.
7.
8.
9.
10.

static void Main() {


Console.WriteLine(Temperatura de congelacin del agua: {0},
(int) Temperatures.FreezingPoint);
Console.WriteLine(Temperatura de ebullicin del agua: {0},
Temperatures.BoilingPoint);
Console.ReadLine();
}

11.
12.
13.
14.
15.
16.
17.
18.

}
OALP-2004 All Rights Reserved

COMPORTAMIENTO

OALP-2004 All Rights Reserved

Propiedades
[modificadores] tipo identificador {
get {
return campo;
}
set {
campo = value;
}
}

Una forma muy conveniente para encapsular un campo


Permite acceder a los campos usando mtodos en forma transparente
Recomendado seguir la convencin de Pascal para los identificadores
get o set son opcionales: propiedades de slo lectura o de slo escritura
No necesariamente debe existir un campo para cada propiedad: valores
derivados
Pueden heredarse de manera selectiva, declarndolas como virtual

OALP-2004 All Rights Reserved

Propiedades - Ejemplo
1.

using System;

2.

public class TestClass {


private string color = yellow;
public string Color { // propiedad Color
get {
return color;
}
set {
color = value;
}
}
public static void Main() {
TestClass c = new TestClass();
Console.WriteLine(c.Color); // get
c.Color = blue;
// set
Console.WriteLine(c.Color); // get
}
}

3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.

OALP-2004 All Rights Reserved

Propiedades Indexadas
[modificadores] tipo this [tipo argumento,] {
get {
;
}
set {
;
}
}

Una forma conveniente para tratar un objeto que encapsula un


arreglo o una coleccin como si el objeto mismo fuera un arreglo
Una propiedad indexada se usa para representar la lista de objetos
contenidos en una clase, usando la notacin objeto[ndice]
Puede pasarse ms de un argumento entre [], y de diferentes tipos
Tambin puede ser declarado como virtual
Se recomienda no poner ms de una propiedad indexada por clase
OALP-2004 All Rights Reserved

Propiedades Indexadas - Ejemplo


1.

using System;

2.

class TestClass {
// este es el arreglo encapsulado
string[] myArray = new string[10];

3.
4.
5.
6.
7.
8.
9.

public static void Main() {

29.

// constructor
public TestClass() {
for (int i=0; i<10; i++)
myArray[i] = hola;
}

30.

TestClass c = new TestClass();

31.

// Asignamos valores a myArray


c[2] = mundo;
c[3] = mundo;
c[5] = mundo;

32.
33.
34.

// indexador sobrecargado
Console.WriteLine(indice que +
contiene mundo es + c[mundo]);

35.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.

// indexamos usando un entero


public string this[int index] {
get {
return myArray[index];
}
set {
myArray[index] = value;
}
}

36.
37.

38.
39.

// indexador sobrecargado usamos una cadena


public int this[string s] {
get {
for (int i=0; i<10; i++) {
if (myArray[i].Equals(s))
return i;
}
return -1;
}
}

OALP-2004 All Rights Reserved

Mtodos
[[atributos]][modificadores]
tipo nombre ([parmetros]) {cuerpo}

Se recomienda usar la convencin de nombres


de Pascal
Si lo que se desea es un procedimiento, el tipo
de retorno es void
Un mtodo que hace override puede ser
declarado como sealed
La firma de un mtodo est compuesta de su
nombre y su lista de parmetros
Un mtodo se puede sobrecargar variando el
nmero o el tipo de sus parmetros
OALP-2004 All Rights Reserved

Modificadores Vlidos de Mtodos


new
abstract
static
override
virtual
sealed
Modificadores de acceso

OALP-2004 All Rights Reserved

Uso de params
Permite utilizar arreglos unidimensionales
como listas de parmetros de tamao
variable
No forma parte de la firma de un mtodo
Slo puede usarse una por mtodo
Si un mtodo tiene ms de un parmetro,
params debe declararse de ltimo
Si lo que se desea es una lista de tamao
y tipo variable, utilizar params object []

OALP-2004 All Rights Reserved

Uso de params - Ejemplo


1.

using System;

2.

class Test {
public void DisplayVals(params int[] intVals) {
for (int i = 0; i < intVals.Length; i++) {
Console.WriteLine(DisplayVals {0}, intVals[i]);
}
}

3.
4.
5.
6.
7.

static void Main() {


Test t = new Test();
t.DisplayVals(1,2,3,4,5);
int [] explicitArray = new int[5] {6,7,8,9,10};
t.DisplayVals(explicitArray);
Console.ReadLine();
}

8.
9.
10.
11.
12.
13.
14.
15.

}
OALP-2004 All Rights Reserved

Parmetros por Referencia

Los tipos referencia siempre se pasan por referencia


Por defecto, los tipos valor siempre se pasan por valor
Se puede usar el modificador de parmetro ref para
pasar tipos valor por referencia
Tambin, se puede usar el modificador de parmetro
out para los casos en los que se desea pasar un
parmetro por referencia sin tener que inicializarlo
primero
Si un parmetro es declarado ref, debe asignrsele un
valor antes del mtodo. Si es declarado out, debe
asignrsele un valor dentro del mtodo
Tpicamente, se utiliza para retornar valores mltiples
desde un mtodo
OALP-2004 All Rights Reserved

Parmetros por Referencia - Ejemplo


1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.

public class Test {


public static void Main() {
int a = 0; // a es inicializado
Test.DoSomething(ref a);
System.Console.WriteLine(a);
}
static void DoSomething(ref int y) {
y = 42;
}
}
public class Test {
public static void Main() {
int a; // a no es inicializado
Test.DoSomething(out a);
System.Console.WriteLine(a);
}
static void DoSomething(out int y) {
y = 42;
}
}

OALP-2004 All Rights Reserved

ORGANIZACIN

OALP-2004 All Rights Reserved

Espacios de Nombres
Una forma de organizar elementos e
identificarlos de manera nica
Evita el riesgo de colisiones de nombres
Dos espacios de nombres pueden
contener la misma clase
Pueden anidarse
Dentro de stos pueden definirse alias

OALP-2004 All Rights Reserved

Espacios de Nombres - Ejemplo

13.

namespace TutorialCSharp {
namespace TutorialCSharpTest {
using System;
using C = System.Console; // definicin de alias
public class Tester {
public static int Main() {
for (int i=0;i<10;i++)
C.WriteLine(i: {0},i); // uso de alias
return 0;
}
}
}
}

El nombre completo de la clase Tester es:

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.

TutorialCSharp.TutorialCSharpTest.Tester
OALP-2004 All Rights Reserved

Ensamblajes

Son la unidad bsica de reutilizacin, versiones,


seguridad y despliegue en .NET
Se trata de una coleccin de archivos que aparecen
como un slo archivo .dll o .exe
Adems de tener una coleccin de clases y mtodos,
tambin contienen otros recursos como archivos con
imgenes, definiciones de tipos para cada clase definida
y meta-datos sobre el cdigo y los datos
Consisten de uno o ms mdulos, con un slo punto de
entrada: DLLMain, WinMain o Main
Se cargan sobre demanda, y nunca son cargados si no
se necesitan
OALP-2004 All Rights Reserved

Ensamblajes
Meta-datos
Informacin almacenada que especifica los tipos y
mtodos del ensamblaje, describiendo por completo el
contenido de cada mdulo: los ensamblajes son autodescriptivos
Seguridad
Forman un lmite de seguridad al limitar el alcance de
los tipos que contienen: la definicin de un tipo no puede
cruzar dos ensamblajes
Versiones
Tienen un nmero de versin que se refiere al contenido
de un slo ensamblaje. Todos los tipos y recursos
dentro del ensamblaje cambian de versin juntos. Son
de la forma mayor:menor:construccin:revisin
OALP-2004 All Rights Reserved

Ensamblajes - Manifiestos

Como parte de sus meta-datos, cada ensamblaje tiene un


manifiesto
Describe qu hay en el ensamblaje: informacin de identificacin
(nombre, versin, etc.), una lista de tipos y recursos, un mapa que
conecta los tipos pblicos con el cdigo que los implementa, y una
lista de los ensamblajes referenciados por este ensamblaje
Pueden examinarse ejecutando un des-ensamblador, (Ej. ildasm)
sobre un ensamblaje
Incluye un cdigo de hash que identifica cada mdulo y garantiza
que cuando un programa se ejecute, slo se cargue la versin
adecuada de un mdulo
A su vez, cada mdulo tiene su propio manifiesto, separado del
manifiesto del ensamblaje
Las referencias a otros ensamblajes incluyen el nombre, la versin,
la cultura y opcionalmente el originador: firma digital del
desarrollador o compaa que proporciona el ensamblaje

OALP-2004 All Rights Reserved

Ensamblajes - Multi-Mdulo

Un ensamblaje de un slo mdulo consiste de un slo


archivo .dll o .exe que contiene todos los tipos e
implementaciones de la aplicacin, junto con su
manifiesto
Un ensamblaje multi-mdulo consiste de mltiples
archivos: 0 1 .exe y 0 ms .dll; aunque debe tener al
menos un .exe o .dll. El manifiesto reside en un archivo
aparte o puede estar en alguno de los mdulos
Cuando el ensamblaje es referenciado, el entorno de
ejecucin carga el archivo con el manifiesto y carga los
mdulos a medida que vaya siendo necesario
til cuando se tiene muchos desarrolladores trabajando
en distintas partes de un mismo programa
Se crean manipulando los archivos assemblyInfo.cs,
makefile en conjunto con las herramientas nmake y csc
OALP-2004 All Rights Reserved

Ensamblajes - Privados
Diseados para ser usados por una sola
aplicacin
Por defecto, los ensamblajes son privados
Los archivos son mantenidos en un mismo
directorio (y sus subdirectorios), nada ms
depende de ellos y se pueden instalar en
otra mquina copindolos directamente
Puede tener cualquier nombre, puesto que
es un nombre local

OALP-2004 All Rights Reserved

Ensamblajes - Compartidos

Diseados para ser compartidos entre muchas


aplicaciones
til cuando se tienen componentes genricos que van a
ser usados por varios programas
Deben cumplir tres condiciones:
Tener un nombre fuerte : una firma digital usando sn; garantiza
que sea globalmente nico, permite verificar al desarrollador y
detectar alteraciones
Tener informacin sobre su versin: Los ensamblajes son
identificados por su nombre y su versin; varias versiones de un
mismo ensamblaje pueden convivir
Situarse en el Cach de Ensamblajes Global (GAC), un rea del
sistema de archivos reservada para almacenar ensamblajes
compartidos

OALP-2004 All Rights Reserved

También podría gustarte