Вы находитесь на странице: 1из 21

C# en Visual Studio 2010

Autores:
Guillermo Soon
Unai Zorrilla
Jorge Serrano

Titulo:
Introduccin a .NET con C# 2010

INDICE DE CONTENIDOS

CAPITULO 1: Caractersticas del lenguaje C#


1.1

El sistema de tipos

Tipos primitivos
Sufijos o caracteres y smbolos identificadores para los tipos:
Conversiones
Conversiones numricas implcitas
Conversiones numricas explcitas
Funciones de Conversin
Variables y Constantes
Constantes
Tipos de datos char, Cadena de Caracteres (String) y
Concatenaciones
Tipos Annimos o Variables Inferidas automticamente
Tipos Nullables
Enumeraciones: constantes agrupadas
Arrays o Matrices
Declarar e inicializar un array
Arreglos Bidimensionales
Cambiar el tamao de un array
Eliminar el contenido de un array
Los arrays son tipos por referencia
1.2

Clases y Estructuras

Clases: Tipos por referencia definidos por el usuario


Las clases: el corazn de .NET Framework
La Herencia: caracterstica principal de la POO
Encapsulacin
Polimorfismo
Object: la clase base de todas las clases de .NET
Definir una clase
Miembros de una clase
Caractersticas de los mtodos y propiedades
Parmetros y parmetros opciones
Array de parmetros opcionales
Sobrecarga de mtodos
Parmetros por valor y por referencia
Parmetros opcionales
Instanciar una clase
Constructores
Destructores
Estructuras
1.3

NOTAS PREVIAS

Desarrollado por Anders Hejlsberg creador del mtico compilador


Turbo Pascal (no del lenguaje sino del compilador) y uno de los
arquitectos principales en el diseo de Delphi.
Lenguaje moderno y altamente expresivo.
Se ajusta al paradigma de la programacin orientada a objetos.
Gestiona la memoria automticamente y el uso de referencias en
lugar de punteros.

CAPITULO 1: Caractersticas del Lenguaje


C#
1.1 El sistema de tipos
El sistema de tipos hace referencia a los distintos tipos de datos
que .NET Framework pone a nuestra disposicin y como usarlos desde
Visual C# 2010.
Los tipos de datos que podemos usar en Visual C# 2010, son los
mismos tipo de datos definidos en .Net Framework y por lo tanto
todos los lenguajes que usan esta tecnologa pueden hacer uso de
estos tipos de datos, lo que variara seria el alias con que cada
lenguaje hace referencia a tal o cual tipo de dato.
Estos tipos comunes se conocen con el nombre de CTS (Common Type
System o Sistema de Tipos Comunes de .NET)

Tipos Primitivos
.NET Framework

C# 2010

System.Boolean

bool

System.Byte

byte

System.Int16

short

System.Int32

int

System.Int64

long

System.Single

float

System.Double

double

System.Decimal

decimal

System.Char

char

System.String

string

System.Object

object

System.DateTime

N.A. (DateTime)

System.SByte

sbyte

System.UInt16

ushort

System.UInt32

uint

System.UInt64

ulong

Tabla 1: Tabla que muestra los tipos de datos de .NET y su


equivalencia en C#
El DateTime es el nico tipo de dato que no tiene alias, por
lo tanto siempre se usar el definido en .NET.
El tipo de dato decimal se usa mas para valores monetarios.
El tipo de dato double se usa mas para clculos
matemticos.
StringBuilder: clase en .NET que sirve para crear cadenas
por ejemplo al momento de concatenar ya que usando esta
clase el rendimiento es superior a la clsica concatenacin.

Sufijos o caracteres y smbolos identificadores


para los tipos
Cuando usamos valores literales numricos en C#, puede ocurrir
estas dos cosas:

a. El tipo de datos que le asigna el compilador es el que ms se


acerque al tipo en el que lo estamos asignando, es decir el
propio C# hace lo que se conoce como "promocin de tipos",
esto significa que si estamos asignando un valor a una

variable de tipo entero, el compilador comprobar que tipo es


el ms adecuado, usando este orden: int, uint, long, ulong. Si
el tipo al que queremos asignar el valor es un tipo diferente a
los cuatro que hemos mostrado, el compilador nos avisar
que el tipo de datos que estamos usando no es el correcto.
b. Por otro lado, si el valor asignado a una variable contiene
valores decimales, el compilador de C# asumir siempre que
el valor es de tipo double. Por lo tanto si el tipo que hay a la
izquierda de esa constante no es double, el compilador
mostrar un error.
Estos errores de compilacin los podemos evitar de dos formas:
La primera es usando un sufijo en la constante, con ese sufijo
le indicamos el tipo de datos que queremos que tenga esa
constante. En la tabla 2 tenemos los sufijos que podemos usar
en C#.
La segunda forma de evitar estos errores de compilacin, es
haciendo una conversin explcita de tipos. En la seccin
siguiente veremos algunos ejemplos de conversiones de tipos.
Tipo de
datos

Sufijo de
C#

short

N.A.

int

N.A.

long

float

double

decimal

ushort

N.A.

uint

UI

ulong

UL

string
N.A.
Tabla 2: Sufijos para identificar los tipos de datos. N.A. indica
que no hay un sufijo para ese tipo.
Ejemplo:

Y espera un
valor tipo double.

Figura 1: Error de compilacin al asignar un valor double a una


variable decimal.

Conversiones
short z = 1234567890;
Si nosotros tratamos de asignar ese valor inmenso a z siendo
de tipo short nos mostrar un error (llamado overflow o error de
desbordamiento) ya que es un valor muy grande para un short.
Por ende lo correcto es cambiar ese short por un int. A
continuacin veremos ms casos relacionados a este tema.

Conversiones numricas implcitas (automticas)


Como hemos comentado anteriormente, el compilador de C#
siempre intentar usar el valor ms adecuado cuando estamos
utilizando distintos tipos de datos.
Esas promociones, (convertir un valor de un tipo pequeo en otro
de mayor capacidad), las realizar solamente en los tipos de
datos que no produzcan prdida de informacin o que estn
contempladas en el compilador. Por ejemplo, podemos asignar un
valor de tipo short a un tipo long, ya que no se producir ningn
tipo de prdida de informacin, porque el valor de un short es
menor que el de un long.

Del tipo

Al tipo (o tipos)

sbyte

short, int, long, float, double, o decimal

byte

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


double, o decimal

short

int, long, float, double, o decimal

ushort

int, uint, long, ulong, float, double, o decimal

int

long, float, double, o decimal

uint

long, ulong, float, double, o decimal

long

float, double, o decimal

char

ushort, int, uint, long, ulong, float, double, o


decimal

float

double

ulong

float, double, o decimal

Tabla 3: Conversiones implcitas o automticas que puede hacer


el compilador de C#. Se lee un valor el tipo sbyte se puede
convertir en tipo short, int, long, etc.

Conversiones numricas explcitas

Hay ocasiones en las que el compilador considera que no se


pueden hacer ciertas conversiones o asignaciones entre
variables y valores. Pero si nosotros sabemos que es posible
hacerlas, podemos obligar al compilador a que las acepte. De esa
forma no recibiremos ningn error y la aplicacin se crear
correctamente.
Debemos tener en cuenta que en tiempo de ejecucin, esa
conversin que hemos hecho de forma explcita (obligando al
compilador a hacerla), puede fallar, por la sencilla razn de que
no se pueda hacer.
Para hacer una conversin explcita, lo haremos de esta
forma:

Cundo
debemos
explcitas?

usar

las

conversiones

Las conversiones explcitas las tenemos que usar en todos los


casos que no se adecuen a los casos mostrados en la tabla 3.
Tener en cuenta que aqu pueden presentarse ciertos errores
como por ejemplo cuando tratamos de asignar un valor a una
variable de tipo entero de mayor capacidad en uno que tiene

menos, el compilador producir un error, porque "sabe" que el


valor grande no "cabe" en el pequeo. Por ejemplo:
short z = 1234567890;
Este comportamiento lo podemos arreglar o cambiar de forma
que si hacemos ese tipo de conversin, slo se almacene en el
tipo de menor capacidad el valor que pueda soportar,
desechando el resto, por ende perderemos precisin.
Ejemplos de cuando debe hacerse conversiones
explicitas:

Nos muestra error porque un valor el double


127.555 no puede ser asignado a una variable tipo
short (pero si en viceversa). Es decir no puede
hacerse conversin implcita porque si miramos la
tabla 3, no existe alguna opcin que diga double
short
Pero si intentamos:
short z = ((short)127.555;
Se ejecutar sin problemas pero al momento de
mostrar el contenido de la variable z mostrar solo
el numero 127.

Funciones de Conversin
En C# no existen funciones de conversin, siempre se utiliza el
formato mostrado; .NET Famework si que las tiene:
Por ejemplo:
Si queremos convertir: valorNumrico valor_tipoCadena
Se usa ToString()
Es decir si queremos convertir un tipo primitivo en una cadena.
Pero si queremos realizar otras conversiones entre distintos tipos
numricos, usaremos la clase Convert, la cual tiene funciones

para realizar conversiones entre los tipos numricos soportados


por .NET:
decimal p = 123456789012345.57M;
es
usando long i = Convert.ToInt64(p);
p

el nmero 12...45.57
convertido a decimal
M y almacenado en
y luego es convertido
explcitamente a long.

Nota: En la solucin Practicando_Consola_1, regin 1 podemos


ver ms ejemplos para este tema de conversiones.

Variables y Constantes
Para poder usar todos esos tipos de datos, necesitamos de los
siguientes conceptos como constantes y variables.

Constantes
Son valores que nunca cambian y pueden ser de dos tipos:
Constantes literales, por ejemplo, cuando usamos 12345,
estamos usando un valor constante, ya que ese nmero
siempre tendr el mismo valor.
Constantes con nombre, son constantes a las que le damos
un nombre y tampoco pueden cambiar.
Consejo para usar las constantes:
Si dentro de nuestro aplicativo necesitamos trabajar siempre con
el mismo valor (mximo o mnimo permitido en un rango de
valores por ejemplo), deberamos establecerle su valor una sola
vez para luego usar tan solo el nombre y si en el futuro se
requiera cambiar el valor, tan solo modifico la declaracin de la
constante mas no estar lnea por lnea haciendo la modificacin,
por ejemplo:

Si en el futuro el valor de MinimaNotaAprobatoria se requiera


cambiar, tan solo modifico en la parte superior donde la declaro y
le asigno el valor mas no en todos los ifs, mtodos, etc donde yo
la use.

Tipos de datos char, Cadena


(String) y Concatenaciones

de

Caracteres

Ms ejemplos de uso con tipos char, cadena de caracteres


(String) y concatenaciones, podemos encontrar en el aplicativo
Practicando_Consola_1, regin 2.1 y 2.2.

Tipos
Annimos
automticamente

Variables

Inferidas

Ejemplo:

Mas detalles en Practicando_WindowsForm_1, regin 1.

Tipos Nullables

Para declarar un tipo como nullable, deberemos indicar el tipo de


dato seguido de un interrogante (?).

Mas detalles en Practicando_WindowsForm_1, regin 2 y en


Practicando_Consola_1 regin 5.

Enumeraciones: constantes agrupadas


(falta documentar y ver video)

Arrays o Matrices
Los arrays nos permitirn agrupar valores que de alguna forma
queremos que estn relacionados entre s.
Un array es una estructura de datos.

Coleccin de elementos del mismo tipo.


Declarar arrays

Por ejemplo, para indicar que queremos tener un array llamado


numeros para almacenar valores de tipo int, lo haremos de esta
forma:
int[] numeros;
Este array esta declarado pero no inicializado. Para iniciarla, al
menos con valores cero, podemos hacerlo de estas dos formas,
dependiendo de que ya hayamos declarado previamente la
variable, (primera lnea), o lo queramos hacer al declararla,
(segunda lnea):
numeros = new int[4];
Las dos lneas de cdigo anteriores se pueden reemplazar por
esta que declara y a la vez inicializa.
int[] num2 = new int[3];
En ambos casos debemos usar new seguido del tipo de datos y
entre corchetes el nmero de elementos que tendr el array. Ese
nmero indicar el total de elementos que tendr el array, pero
tener en cuenta que el ndice inferior ser cero y el ndice
superior ser uno menos del nmero de elementos que hemos
indicado al crear el array.
Nota: Para mayor detalle revisar Practicando_Consola_1,
regin 3.1.

Declarar e inicializar un array

Detalles en Practicando_Consola_1, regin 3.1, 3.2 y 3.4.

Arreglos Bidimensionales:

Si el array es bidimensional (o con ms dimensiones), tambin


podemos inicializarlos al declararlo, pero en este caso debemos
usar doble juego de llaves:
string[,] nombres = { { "Juan", "Pepe" }, { "Ana", "Eva" } };
En este cdigo tendramos un array bidimensional con los
siguientes valores:
nombres[0,0]=
nombres[0,1]=
nombres[1,0]=
nombres[1,1]=

Juan
Pepe
Ana
Eva

Detalles en Practicando_Consola_1, regin 3.

Cambiar el tamao de un array

Si anteriormente declaramos un array de 3 elementos:


int[] arrayBruno = new int[3];
para cambiar el tamao lo que haremos es:
int[] arrayBruno = new int[5];
Lo que no podemos hacer en C# es cambiar el tamao de un
array conservando el contenido anterior, algo que en otros
lenguajes si es posible. La nica forma de conseguirlo es hacer
una copia previa de ese array, redimensionarlo al nuevo tamao
y volver a copiar el contenido anterior.
Para mayor informacin revisar Curso de Introduccin a .NET
con C# de MSDN con el Guille, Unai Zorrilla.

Eliminar el contenido de un array


(falta documentar y ver video)

Los arrays son tipos por referencia


(falta documentar y ver video)

1.2 Clases y Estructuras


En la leccin anterior vimos los tipos de datos predefinidos en .NET
Framework, en esta leccin veremos cmo podemos crear nuestros
propios tipos de datos, tanto por valor como por referencia.
Tambin tendremos ocasin de ver los distintos niveles de
accesibilidad que podemos aplicar a los tipos, as como a los
miembros definidos en esos tipos de datos.

Clases: Tipos por referencia definidos por el


usuario
Tal como vimos en la leccin anterior, los tipos de datos se dividen en
dos grupos: tipos por valor y tipos por referencia. Los tipos por
referencia realmente son las clases de las cuales nosotros creamos
instancias para poder usarlas, esa instancia o copia, se crea siempre
en la memoria lejana (heap) y las variables lo nico que contienen es
una referencia a la direccin de memoria en la que el CLR (Common
Language Runtime, motor en tiempo de ejecucin de .NET), ha
almacenado el objeto recin creado.

Las clases: el corazn de .NET Framework

Todo lo que podemos hacer en .NET Framework lo hacemos


mediante clases. La librera de clases de .NET Framework es
precisamente el corazn del propio .NET, en esa librera de
clases est todo lo que podemos hacer dentro de este marco
de programacin.
Cualquier tarea que queramos realizar existen clases, y si no
existen, las podemos definir nosotros mismos, bien ampliando
la funcionalidad de alguna clase existente mediante la
herencia, bien implementando algn tipo de funcionalidad
previamente definida o simplemente crendolas desde cero.

La Herencia: Caracterstica principal de POO

El concepto de Programacin Orientada a Objetos (POO) es


algo intrnsico al propio .NET Framework, por tanto es una
caracterstica que todos los lenguajes basados en este "marco
de trabajo" tienen de forma predeterminada.
Entre las principales caractersticas de la POO, destaca la
herencia que nos permite ampliar la funcionalidad de una clase
existente sin perder la que ya tuviera previamente.

Con herencia podemos crear una nueva clase que se derive de


otra, esta nueva clase derivada puede cambiar el
comportamiento de la clase base y/o ampliarla.

Encapsulacin (Tela, aumentar mas)

La encapsulacin y el polimorfismo son otras dos


caractersticas de la programacin orientada a objetos.
La encapsulacin nos permite abstraer la forma que tiene de
actuar una clase sobre los datos que contiene o manipula;
para poder lograrlo se exponen como parte de la clase los
mtodos y propiedades necesarias para que podamos manejar
esos datos sin tener que preocuparnos cmo se realiza dicha
manipulacin.

Polimorfismo (Tela, aumentar mas)

Caracterstica que nos permite realizar ciertas acciones o


acceder a la informacin de los datos contenidos en una clase
de forma semi-annima, al menos en el sentido de que no
tenemos porqu saber sobre qu tipo de objeto realizamos la
accin, ya que lo nico que nos debe preocupar es que
podemos hacerlo.
El ejemplo clsico del polimorfismo es que si tengo un objeto
que "sabe" cmo morder, da igual que lo aplique a un ratn o
a un dinosaurio, siempre y cuando esas dos "clases"
expongan un mtodo que pueda realizar esa accin... y como
deca la documentacin de Visual Basic 5.0, siempre ser
preferible que nos muerda un ratn antes que un dinosaurio.

Object: La clase base de todas las clases de .NET

Todos los tipos de datos de .NET, ya sean por valor o por


referencia siempre estn derivados de la clase Object, por
tanto podremos llamar a cualquiera de los mtodos que estn
definidos en esa clase.

Adems todas las clases de .NET se derivan de la clase


Object, es decir, lo indiquemos o no, cualquier clase que
definamos tendr el comportamiento heredado de esa clase.

El uso de la clase Object como base del resto de las clases de


.NET es la nica excepcin a la herencia simple soportada por
.NET, ya que de forma implcita, todas las clases de .NET se
derivan de la clase Object independientemente de que estn
derivadas de cualquier otra.

Aunque en el caso de los tipos de datos por valor, cuando


queremos acceder a la clase Object que contienen, .NET
Framework primero debe convertirla en un objeto por
referencia (boxing) y cuando hemos dejado de usarla y
queremos volver a asignar el dato a la variable por valor,
tiene que volver a hacer la conversin inversa (unboxing).

Definir una clase


Todo el cdigo que queramos escribir, lo tendremos que hacer en un
archivo con extensin .cs y dentro de este archivo escribiremos
nuestro cdigo.
Un archivo puede contener ms de dos clases.

Miembros de una clase


Una clase puede contener cualquiera de estos elementos
(miembros):
a. Enumeraciones
b. Campos
c. Mtodos (funciones o procedimientos)
d. Propiedades
e. Eventos
a. Las enumeraciones, como vimos en la leccin anterior,
podemos
usarlas
para
definir
valores
constantes
relacionados, por ejemplo para indicar los valores posibles de
cualquier "caracterstica" de la clase.
b. Los campos son variables usadas para mantener los datos
que la clase manipular.
c. Los mtodos son las acciones que la clase puede realizar,
normalmente esas acciones sern sobre los datos que
contiene. Los mtodos pueden devolver valores como
resultado de la "accin" realizada o tambin pueden devolver
un valor void, que significa que realmente no devuelve nada.
d. Las propiedades son las "caractersticas" de las clases y la
forma de acceder "pblicamente" a los datos que contiene.
Por ejemplo, podemos considerar que el nombre y los
apellidos de un cliente son dos caractersticas del cliente.

e. Los eventos son mensajes que la clase puede enviar para


informar que algo est ocurriendo en la clase.

Caractersticas de los mtodos y propiedades


a. Accesibilidad, mbito y miembros compartidos
Accesibilidad y mbito, 2 conceptos estrechamente
relacionados.
Aunque en la prctica tienen el mismo significado, ya que lo
que representan es la "cobertura" o alcance que tienen los
miembros de las clases e incluso de las mismas clases que
definamos.
b. mbito
Es el alcance que la definicin de un miembro o tipo puede
tener. Es decir, cmo podemos acceder a ese elemento y
desde dnde podemos accederlo.
El mbito de un elemento de cdigo est restringido por el
"sitio" en el que lo hemos declarado. Estos sitios pueden ser:
mbito de bloque: Disponible nicamente en el bloque
de cdigo en el que se ha declarado.
mbito de procedimiento: Disponible nicamente dentro
del procedimiento, (funcin o propiedad), en el que se ha
declarado.
mbito de mdulo: Disponible en todo el cdigo de la
clase o la estructura donde se ha declarado.
mbito de espacio de nombres: Disponible en todo el
cdigo del espacio de nombres.
c. Accesibilidad
A los distintos elementos de nuestro cdigo (ya sean clases o
miembros de las clases) podemos darle diferentes tipos de
accesibilidad. Estos tipos de "acceso" dependern del mbito
que queramos que tengan, es decir, desde dnde podremos
accederlos.
Los modificadores de accesibilidad son:
public: Acceso no restringido.
protected: Acceso limitado a la clase contenedora o a los
tipos derivados de esta clase.
internal: Acceso limitado al proyecto actual.
protected internal: Acceso limitado al proyecto actual o
a los tipos derivados de la clase contenedora.
private: Acceso limitado al tipo contenedor.

Parmetros y parmetros opcionales


En C# los mtodos de una clase o funciones de una clase puede
recibir parmetros. Esos parmetros pueden estar explcitamente
declarados, de forma que podamos indicar cuantos argumentos
tendremos que pasar al mtodo, o bien podemos usar lo que se
conoce como un array de parmetros opcionales, en los que se
puede indicar un nmero variable de argumentos al llamar a la
funcin que los define.

Array de parmetros opcionales (params)


A veces hay circunstancias en las que a una funcin necesito
pasarle un nmero variable de parmetros como por ejemplo un
arreglo. Esto es posible en C# y se implementa de la siguiente
manera:
int sumaParams(params int[] parametros)
{
int total = 0;
for (int i = 0; i < parametros.Length; i++)
total += parametros[i];
return total;
}
En realidad, la declaracin de params siempre es un array de un
tipo determinado, y al ser un array, se admite cualquier nmero
de argumentos al llamar a la funcin, pero siempre debern ser
del tipo definido en la funcin.
Podemos llamar a esa funcin indicando el nmero de argumentos
que creamos conveniente como por ejemplo:
int total2 = sumaParams(1, 3, 5, 7, 9);
Detalles en Practicando_Consola_1, regin 4.

Sobrecarga de mtodos
Este concepto se refiere a que podemos tener un mismo mtodo o
funcin pero con diferentes tipos de parmetros y tambin
cantidad de parmetros.
Un ejemplo de esto es el siguiente:
int suma(int uno, int dos)
{
return uno + dos;
}

Funcin suma que acepta dos parmetros de tipo int.

double suma(double uno, double dos)


{
return uno + dos;
}
La misma funcin suma pero que tambin acepta 2 parmetros
pero son de tipo double.

Siempre podremos crear sobrecarga de funciones si los


parmetros son de distinto tipo o tienen un nmero diferente de
parmetros, ya que si solo se diferencian por el tipo del valor
devuelto, no podemos crear sobrecarga.

Parmetros por valor y parmetros por referencia


(Falta documentar)

Parmetros Opcionales
(Falta documentar)

Instanciar una clase


Una vez que hayamos definido una clase lo que tenemos es un
molde, una plantilla por as decirlo de los cuales puedo empezar a
crear objetos en memoria para poder hacer uso de los mtodos y/o
atributos que esa clase implemente.
Para crear estos objetos los podemos hacer de las siguientes formas:
1era Forma - Hacerlo por partes:

Como vemos en dos lneas hemos creado nuestro objeto usando


como molde la clase clsCliente.
Tener en cuenta que clsCliente es una clase que hemos definido
previamente con atributos de nombre, apellido paterno y fecha de

nacimiento a los cuales les estamos asignando valores: Bruno Hans,


Rojelio y 29/12/85 respectivamente. Tenemos tambin un mtodo
llamado hacer Facturacin que lo invocamos especificando el objeto
que lo contiene con objCliente seguido del punto (.) y el nombre del
mtodo el cual me retorna un resultado y lo asigno a la variable tipo
string llamada Factura.
Todo esto se puede hacer si al inicio hemos declarado la clase con sus
atributos y mtodos y luego hemos creado al objeto con la palabra
new.
2da forma En un solo paso
clsCliente objCliente = new clsCliente();

Constructores
Luego de crear el objeto en memoria, inmediatamente se llama
por defecto al constructor de la clase. Este constructor es un
mtodo por lo general pblico que lleva el mismo nombre de la
clase y que sirve para asignar valores iniciales a los atributos de
ese objeto recin instanciado.
Realmente solamente deberamos incluir cdigo dentro del
constructor que realice algn tipo de inicializacin.
Si nosotros no especificamos este constructor, automticamente
el compilador de C# lo har por nosotros.
Para ver los diferentes formas en las que puedo crear un
constructor es decir con parmetros, sin parmetros, etc, ver
Practicando_Consola_2, regin 1.

Destructores
De la misma forma que una clase tiene su punto de entrada o
momento de nacimiento en el constructor, tambin tienen un sitio
que se ejecutar cuando el objeto creado en la memoria ya no sea
necesario, es decir, cuando acabe la vida del objeto creado.
El destructor de C# se llama igual que la clase pero precedida del
carcter ~ y no puede tener ningn modificador de visibilidad. Y
solo es necesario definirlo si nuestra clase utiliza algn tipo de
recurso, por tanto no es necesario definirlo si no tenemos que
liberar expresamente algn recurso asignado en el constructor.
La definicin del destructor de nuestra clase Cliente poda ser algo
como esto:

El que un destructor no sea accesible externamente es por la


sencilla razn de que es el propio CLR el que se encarga de
gestionar la destruccin de los objetos que ya no son utilizados.
Debido a que no es posible invocar al destructor desde el objeto
creado en la memoria, debemos implementar explcitamente un
mtodo que sea el que se encargue de hacer esa limpieza de los
recursos utilizados por nuestra clase, ese mtodo suele tener el
nombre Close o Dispose, en este ltimo caso, lo que se
recomienda es que nuestra clase implemente la interfaz
IDisposable con idea de que si no se llama expresamente al
mtodo que libera la memoria, sea el propio runtime del .NET
Framework el que lo llame cuando el objeto ya no sea necesario
mantenerlo en memoria.
Es importante saber que los destructores no se llaman de forma
inmediata, es decir, es posible que un objeto ya no se est
usando, pero el CLR no llamar al destructor hasta que no lo crea
conveniente, por tanto si nuestra clase utiliza recursos externos es
imperativo que el usuario que utilice nuestra clase llame de forma
explcita al mtodo que hayamos definido para liberar esos
recursos.

Estructuras (aca me quede)

1.3 Manejo de excepciones

II.

Вам также может понравиться