Vous êtes sur la page 1sur 23

UNIVERSIDAD DE EL SALVADOR

FACULTAD DE INGENIERIA Y ARQUITECTURA


ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS
INTRODUCCION A LA INFORMATICA

Unidad VI
Estructuras de Datos
I.
Introduccin
En esta unidad se hace nfasis en el uso y la importancia que tienen las estructuras de datos:
como vectores, arreglos, cadenas de caracteres, estructuras y enumeraciones. Los arreglos son
estructuras de datos que se fundamentan en elementos de datos del mismo tipo y que alguna
relacin entre ellos existe. Los arreglos son otro tipo de formas siempre de longitud fija;
conservan la misma longitud una vez que se crean, aunque puede reasignarse una variable tipo
arreglo de tal forma que haga referencia a un nuevo arreglo de distinta longitud.
II.
Vectores
Qu es un vector?
Es una estructura de datos que permite almacenar un CONJUNTO de datos del MISMO tipo
(enteros, bolanos, fechas); un vector tambin es llamado Array unidimensional

Estas estructuras de datos son adecuadas para situaciones en las que el acceso a los datos se
realice de forma aleatoria e impredecible, por ejemplo, cuando tenemos un conjunto de
nmeros desordenados o una lista de nombres.
Por el contrario, si los elementos pueden estar ordenados y se va a utilizar acceso secuencial
no sera adecuado utilizar esta estructura.
Declaracin:
Cuando se declara un vector en C# se debe colocar los corchetes despus de tipo de dato
seguido del nombre del vector

Inicializacin:
Hay varias formas de inicializar los vectores:
Para declarar e inicializar el vector de una sola ves solamente se debe especificar de qu tipo
sern los elementos del vector seguida del nombre y utilizando la palabra reservada new
seguido del tamao del vector de esta forma:
<tipo> [] <nombre> = new <tipo> [<tamao>];

El operador new se utiliza para crear el vector e inicializar sus elementos con valores
predeterminados aunque se puede omitir; las dos declaraciones siguientes son equivalentes:
string[] nombres = new string[] {"Carlos", " Raquel", "Mariana"};
Es equivalente a:
string[] nombres = {"Carlos", " Raquel", "Mariana"};
Por ejemplo, si se desea crear un nuevo vector de 8 nmeros enteros:
int [] numeros = new int [8];
int es para decir que son enteros los que se van a almacenar, nmeros es el nombre del vector
o array y new es el operador que indica al compilador que cree un nuevo vector con una
capacidad de 8 elementos.
Si se quiere establecer los 8 nmeros enteros desde un principio, se deber incluir entre llaves,
los elementos separados por coma como en el ejemplo:
int [] a = {6,1,5,6,4,8,6,9};
Una cadena se puede inicializar del mismo modo. A continuacin, se muestra una declaracin
de un vector de cadena en la que cada elemento del vector se inicializa con el nombre:
string[] nombres = new string[] {"Carlos", " Raquel", "Mariana"};
Acceder a los elementos de un vector
Para acceder a un elemento en una posicin i solo hay que hacer de la siguiente manera (si el
array se llama mi_array): mi_array[i]
Aqui otros ejemplos:

Es importante mencionar que para referirse al elemento de la posicin n del array, hay que
escribirlo como mi_array[n-1] ya que mi_array[0] devuelve el primer elemento del array.
Para recorrer un vector se puede hace uso de un lazo for, como se muestra a continuacin:
int[] valores = { 5, 5, 5 };
int respuesta = 0;
for (int i = 0; i < valores.Length; i++)
{
respuesta += valores[i];
}
Console.WriteLine("Resultado de la suma: "+respuesta);
Console.ReadLine();
En C# tambin podemos utilizar la sentencia foreach, es una manera simple de acceder a los
valores de un arreglo (esta es una manera ms eficiente de recorrerlo).

Arrays o vectores se trabajan como objetos en C#


En C#, los arrays son objetos. Adems, todos los arrays, de cualquier tipo derivan de la clase
System.Array, que es el tipo base abstracto de todos los tipos de arrays.
La clase System.Array proporciona muchos mtodos y propiedades para manipular arrays
Es importante tener en cuenta que el tipo System.Array no es un tipo array, sino un tipo del
cual derivan todos los tipos array.
Las propiedades y mtodos ms importantes son las siguientes:
Length: devuelve el nmero de elementos de un array. Por ejemplo:
Int []unArray = {1, 2, 3, 4, 5};
int longitudDelArray = unArray.Length;
Devolver el valor de 5
GetLength: obtiene la longitud de una determinada dimensin cuando el array es
multidimensional. Por ejemplo, para obtener el nmero de elementos de la primera
dimensin:

int longitud=otroArray.GetLength(0);
Sort y Reverse: Estos mtodos permiten ordenar un array de modo ascendente o descendente.
Son mtodos estticos. Por ejemplo:
Array.Sort(unArray);
o bien:
Array.Reverse(unArray);
Otros ejemplos son:

Se pueden consultar todos los mtodos en el siguiente enlace:


https://msdn.microsoft.com/es-es/library/system.array(v=vs.110).aspx?cs-save-lang=1&cslang=csharp#code-snippet-1

Ejemplo 1
Realizar un mtodo que diga si un nmero entero est o no dentro de un array.

Ejemplo 2
Crear un mtodo que reciba un array de nmeros enteros y devuelva un nmero entero, que
ser el mayor de los elementos del array.

III.

Cadenas de caracteres

Las cadenas de caracteres son muy importantes en el desarrollo de software. Todos los
lenguajes de programacin tienen herramientas para la manipulacin primitiva de caracteres,
pero C# cuenta con una coleccin de mtodos especialmente til.
En esta seccin se analizan todas las herramientas para trabajar con cadenas que hemos
utilizado hasta este momento, y ampliaremos nuestro conocimiento al estudiar el conjunto de
mtodos disponibles para el procesamiento de cadenas.
Las siguientes son algunas situaciones en las que se utilizan cadenas de caracteres:
Mostrar mensajes en pantalla (quiz mediante la colocacin de texto en etiquetas).

Recibir texto del usuario. A menudo esto se hace mediante un cuadro de texto, pero
en una aplicacin de consola el usuario podra introducir texto a travs de la lnea de
comando.
Almacenar datos en archivos. Cuando trabajemos con archivos en el captulo 18,
veremos que el contenido de muchos tipos de archivo puede considerarse como una
secuencia de cadenas. Adems, los nombres de los archivos y las carpetas son cadenas
de caracteres.
Realizar bsquedas en pginas Web.
Guardar texto en memoria, de manera que pueda ser empleado por los procesadores
y editores de texto.

Se puede declarar variables y proveer un valor inicial, como en el siguiente ejemplo:


string x;
string y = "El Salvador";
Tambin podemos asignar una cadena a otra, como en:
x = "UES";
y = "FIA";
y = x;
x = ""; // una cadena de longitud cero
Y crear arreglos de cadenas de caracteres (con ndices que empiezan en 0), como en el
siguiente ejemplo:
string [] ciudades = new string[10]; // 0 a 9
Podemos convertir cadenas de caracteres a nmeros, y viceversa; para ello empleamos los
mtodos de la clase Convert. Esto es til cuando recibimos cadenas a partir de un cuadro de
texto (o de un archivo, como veremos ms adelante). Por ejemplo, podramos utilizar el
siguiente cdigo:
int n = 3;
double d;
x = Convert.ToString(n);
y = "123";
n = Convert.ToInt32(y);
d = Convert.ToDouble("12.345");
Si una cadena no se puede convertir en nmero se produce una excepcin.
Cada uno de los caracteres que conforman una cadena de caracteres tiene un ndice numrico,
empezando desde cero. Pero cuidado: es fcil confundir la longitud de una cadena con el valor
mximo del ndice. Para comprender esta situacin veamos el siguiente diagrama, que
muestra la cadena informtica:
I
0

N
1

F
2

O
3

R
4

M
5

A
6

T
7

I
8

C
9

A
10

Como puede ver, el valor mximo del ndice es 10 y la longitud de la cadena (el nmero de
caracteres que contiene) es 11.
Una regla que se tiene, en esta asignatura es que se valora como ms importante la claridad de
un programa que su velocidad de ejecucin. Sin embargo, algunas veces enfrentaremos
situaciones, por ejemplo, el caso en que nuestras cadenas slo contienen un carcter. C#
cuenta con un tipo de datos llamado char, el cual almacena cada elemento como carcter
Unicode de 16 bits; en consecuencia, podemos realizar comparaciones entre valores char con
la misma rapidez que con enteros. He aqu algunos ejemplos:
char inicial = 'M';
char marcador = '\n';
char letra;
letra=inicial;
if (letra== 'B')
{ // etc... }
Observe el uso de la comilla sencilla en vez de la comilla doble que utilizamos para las cadenas
de caracteres. Estas comillas slo pueden contener un carcter (aunque parezca que \n consta
de dos caracteres, se reemplaza en tiempo de compilacin por el carcter individual de nueva
lnea). Para hacer conversiones entre char y string podemos usar esta instruccin:
inicial = Convert.ToChar("x");
string letraComoCadena = Convert.ToString(letra);
El tipo char se utiliza muy poco, pero algunas veces es necesario emplearlo
Comparacin de cadenas
Siempre podemos comparar cadenas mediante los operadores == y !=. Sin embargo, a menudo
se necesita colocar las cadenas en orden alfabtico, para lo cual debemos poder determinar si
una cadena va antes que otra. Ahora bien, antes se mencion que cada carcter tiene un
cdigo numrico propio. Imagine que a es el menor, b es el siguiente, etctera. Despus de z
tenemos A, B, etctera. Las cadenas se comparan empezando desde el carcter ubicado en el
extremo izquierdo. He aqu algunos ejemplos:
antena va antes que barco
ancho va antes que antena
algo va antes que algoritmo
ANTENA va antes que BARCO
antena va antes que INSECTO
insecto va antes que INSECTO
El mtodo CompareTo devuelve un resultado entero con el siguiente significado:

0 si las cadenas son iguales;


-1 si el objeto cadena va antes que el parmetro;
1 si el objeto cadena va despus que el parmetro.

Si utilizamos:

n = "antena".CompareTo("barco");
n recibir un -1.

Correccin de cadenas
En esta seccin veremos mtodos para modificar cadenas de caracteres. Estos mtodos en
realidad crean una nueva cadena, en vez de modificar la original.
ToLower El mtodo ToLower convierte cualquier letra mayscula que se encuentre en una
cadena en letra minscula. En el siguiente ejemplo:
cadena1 = "Versin 1.1";
cadenaResultante = cadena1.ToLower();
Coloca la cadena "versin 1.1" en cadenaResultante
ToUpper El mtodo ToUpper realiza una operacin similar a la de ToLower, pero cambia las
letras minsculas por sus equivalentes en mayscula. Por ejemplo:
cadena1 = "C Sharp";
cadenaResultante = cadena1.ToUpper();
El resultado sera que cadenaResultante tomara el valor "C SHARP".
Trim El mtodo Trim elimina espacios a ambos extremos de una cadena. Si utilizamos:
cadena1 = " Centro ";
cadenaResultante = cadena1.Trim();
cadenaResultado se convertir en "Centro".
Insert Este mtodo nos permite insertar caracteres en una posicin especfica de la cadena,
como en:
cadena1 = "Programacin en C Sharp";
cadenaResultante = cadena1.Insert(16, "Visual ");
El resultado es "Programacin en Visual C Sharp"

Para un listado completo de los mtodos que se pueden utilizar con las cadenas de caracteres
https://msdn.microsoft.com/es-es/library/system.string_methods(v=vs.110).aspx

IV.
Arreglos
Supongamos que se tiene las siguientes calificaciones de los alumnos arreglados de la siguiente
manera

Alumno Parcial 1 Parcial 2 Parcial 3


Luis

Carmen

Miguel

Definicin:
MATRIZ o arreglo bidimensional es un arreglo de arreglos, que representan una tabla, tiene
filas y columnas. Los datos de una matriz son todos del mismo tipo y son accedidos mediante
dos ndices o posiciones: uno para filas y otro para columnas.
Por ejemplo

1
1

(1,2)

(1,3)

(2,1)

(2,2)

(2,3)

(3,1)

(3,2)

(3,3)

(1,1)

Una Matriz desde el punto de vista matemtico

Vista conceptual de una matriz

En este caso tenemos una matriz de dimensin (o tamao) M x N, donde M es el nmero de


filas y N el nmero de columnas. Aqu M=2 y N=4
De la misma forma que los arreglos, una matriz debe tener tambin un nombre, digamos M.
Declaracin de una matriz en C#
tipo NombreMatriz [ No. filas ][No. columnas];
Ejemplo:
int
Tabla
[ 3 ] [ 5 ];
Declaracin
La declaracin de un arreglo consiste en establecer las caractersticas del arreglo y sus
elementos, por medio de la siguiente sintaxis:

< identificador > = new <tipo> [ dim1, dim2 ] ;

Donde:

new es el operador para gestionar espacio de memoria, en tiempo de ejecucin,


dim1 y dim2 son valores enteros que representan las dimensiones del arreglo
El par de corchetes y la coma, [ , ], representan las dimensiones del arreglo y encierra dos
nmeros enteros, cuyo producto corresponde al nmero de elementos del arreglo.
Ejemplos:

double [ , ] matriz ;
int [ , ] ubicacin ;

En la declaracin, el espacio entre los corchetes est vaco. Esto se debe a que, durante dicha
operacin, no se reserva espacio en la memoria.
Si deseamos especificar el nmero de filas y columnas de la matriz simplemente se lo
colocamos en los corchetes:

matriz = new double [2, 3] ; // Se crea el arreglo matriz, con 6 elementos de tipo punto flotante
y precisin doble .
ubicacion = new int[ 4,2] ; //Se crea el arreglo ubicacin, con 8 elementos de tipo entero de 32
bits .
Las operaciones de declaracin y creacin anteriores se pueden agrupar en una sola
instruccin, como se muestra enseguida:

double [ , ] matriz = new double [2,3] ;


int [ , ] ubicacin = new int[4, 2] ;

Adems de leer, escribir y procesar matrices, tambin podemos inicializarlas con valores para
evitar leerlos desde el teclado u otro dispositivo de E/S.
int tabla[2][3]={{10,20,30},{40,50,60}};

Inicializacin

Un arreglo es un objeto que, cuando es creado por el compilador, se le asignan


automticamente valores iniciales predeterminados a cada uno de sus elementos, de
acuerdo a los siguientes criterios:

Si el tipo del arreglo es numrico, a sus elementos se les asigna el valor cero.

Si el tipo del arreglo es char, a sus elementos se les asigna el valor '\u0000'.

Si el tipo del arreglo es bool, a sus elementos se les asigna el valor false.

Si el tipo del arreglo es una clase, a sus elementos se les asigna el valor nul

Cuando se requiere asignar valores iniciales diferentes de los predeterminados, es posible


agrupar las operaciones de declaracin, creacin e inicializacin en una sola instruccin, por
ejemplo:

double [ , ] matriz = { {1.5, 0, 4, -6.5, 2 } , {2.3, 9, 3.5, 4.8, 6.2} };


int [ , ] ubicacin = { {2, 4} , {6, 8} , {9, 10}, {5 , 1}};
string [ , ] funcionario = { {"Hugo", "jefe"} ,
{ "Paco", "operador "},
{ "Lus","ayudante"} };

Acceso a los elementos de una Matriz.


Acceder a los elementos de una matriz significa, ser capaces de almacenar valores y
recuperarlos de cada elemento de la matriz.
Cada elemento de la matriz tiene asignado una posicin denotada por su fila y su columna. Por
ejemplo:

M[ 0 ][ 0 ]
M[ 1 ][ 2 ]
Sea la matriz M[3][4]

La fila y la columna inician desde cero.


Tener cuidado de no exceder los lmites de la matriz.
Cualquier elemento individual de una matriz, puede ser utilizado como una variable
normal.

Dimensionar y leer una matriz


Para dimensionar o declarar una matriz hacemos

M [5][6].

La lectura de una matriz se realiza por medio de dos ciclos anidados, uno que recorra la filas y
otro las columnas, es decir,
para fila = 0 hasta 4 hacer
para columna = 0 hasta 4 hacer
Leer M[fila][columna]
fin_para_columna
fin_para_fila

El recorrido de la matriz M para su lectura se hace de la siguiente manera:

Si una matriz tiene igual nmero de filas y columnas decimos que es una matriz cuadrada.

Ejemplo: Calcular el promedio de los elementos de una matriz.

Escriba un algoritmo que lea una matriz de 10x10 y sume los


Elementos de la diagonal principal
1. Inicio
2. Var entero f,c,suma=0
entero M[10][10]
3. para f= 0 hasta 9 hacer
para c= 0 hasta 9 hacer
Leer M[f][c]
fin_para_c
fin_para_f
4. para f= 0 hasta 9 hacer
para c= 0 hasta 9 hacer
suma= suma + M[f][f]
fin_para_c
fin_para_f
5. Escribir La suma de la
diagonal es,suma
6. Fin
C# dispone de la instruccin foreach. Esta instruccin proporciona un modo simple y
limpio de iterar en los elementos de una matriz. Por ejemplo, el siguiente cdigo crea
una matriz denominada numbers y la recorre mediante la instruccin foreach:
int[,] numbers = new int[3, 2] {{9, 99}, {3, 33}, {5, 55}};
foreach(int i in numbers)
{
Console.Write("{0} ", i);
}

Otros mtodos de la clase System.Object>System.Array

V.

Estructuras

Las estructuras (Struct en C#) Es un tipo de dato definido por el usuario que normalmente se
usa para encapsular pequeos grupos de variables relacionadas, como las coordenadas de un
rectngulo o las caractersticas de un elemento en un inventario.
Al definir una estructura para los datos todo el grupo puede ser procesado con un solo nombre
de estructura, sin importar el nmero de variables que contenga la estructura.
Algunas de las variables declaradas en el cdigo C# pueden tener una relacin lgica con otras
variables ya declaradas. Ejemplo Se quiere escribir un cdigo que trabaje con un punto de la
pantalla.
Int CoordenadaX;
Int CoordenadaY;
El punto tiene dos valores, la coordenada X y la coordenada Y, que funcionan juntas para
escribir el punto.
Aunque se puede escribir el cdigo C# de esta manera, es bastante pesado. Los dos valores
deben poder usarse en cualquier cdigo que quiera trabajar con el punto; para que un mtodo
trabaje con el punto tendr que pasar los valores uno a uno.

La situacin resulta incluso ms complicadas cuando varias variables trabajan juntas para
describir una sola entidad.
Por ejemplo un empleado de una base de datos de RR.HH puede tener variables que
representen un
Nombre, Apellido, direccin, telfono, salario, etc.
Controlar todas estas variables por separado y asegurarse de que todas se usan como un grupo
puede volverse complicado; e aqu la importancia de las estructuras
Casi todas los structs comparten la misma sintaxis que las clases, aunque estn ms limitadas
que stas:
Dentro de una declaracin de struct, los campos no se pueden inicializar a menos que se
declaren como constantes o estticos.
Un struct no puede declarar un constructor predeterminado (es decir, un constructor sin
parmetros) ni un destructor.
Caractersticas de las Estructuras
A diferencia de las clases (se ver los concepto sobre esto ms adelante en la materia), es
posible crear instancias de los structs sin utilizar un operador new.
Los structs pueden declarar constructores que tienen parmetros.
Un struct no puede heredar de otro struct o clase, ni puede ser la base de una clase. Todos los
structs heredan directamente de System.ValueType, que hereda de System.Object.

Los structs son tipos de valor y las clases son tipos de referencia.

Un struct puede implementar interfaces.

Un struct se puede utilizar como tipo que acepta valores null y se le puede asignar un
valor null.

Declarar una estructura en c#


Los contenidos de una estructura se declaran usando la palabra clave struct.
Para dar un nombre a una estructura se coloca el identificador despus de la palabra clave
struct.
La lista de variables que forman la estructura se encierra entre llaves a continuacin del
identificador de la estructura.
Las declaraciones de miembro de la estructura suelen llevar antepuesta la palabra clave public.
Por ejemplo:

La declaracin de una estructura que defina un punto en un plano puede ser como se muestra
a continuacin:
struct Punto
{
public int X;
public int Y;
}

En el ejemplo los miembros de la estructura X e Y, tienen el mismo tipo. Las estructuras


pueden estar formadas por variables de distinto tipo.
Como con todas las instrucciones C#, solo puede declararse una estructura desde el interior de
una clase. C# no permite inicializar miembros de estructuras en el momento de declararse.
Usar estructuras en el cdigo
Para usar la estructura en el cdigo se indica el identificador de la estructura seguido del
identificador de la variable de la estructura; ejemplo:
Punto MiPunto;
Esta declaracin declara una variable llamada MiPunto cuyo tipo es el de la estructura Punto
Esta variable se puede usar igual que cualquier otra variable.
Usar mtodos constructores
Una estructura puede incluir un mtodo especial llamado constructor, tambin las estructuras
pueden tener varios constructores o ninguno.
Las declaraciones de constructores de estructuras son muy parecidas a las declaraciones de
mtodos de clase. Con las siguientes excepciones:
Los constructores no devuelven ningn valor. No se pueden usar palabras clave de tipo de
devolucin, ni siquiera void.
Los identificadores de constructores tienen el mismo nombre que la estructura.
Los constructores deben tener al menos un parmetro. C# no permite definir un constructor
sin parmetros.
Ejemplo de uso de constructores:

class DistanciaDosPuntos
{
struct Punto{

public int X;
public int Y;

public Punto(int InicialX){


X=InicialX;
Y=1000;
}
}
}
LLAMAR A MTODOS DESDE ESTRUCTURAS

Tambin se pueden escribir mtodos en las estructuras. Estos mtodos siguen las mismas
reglas que los mtodos de clase:

Deben especificar un tipo de devolucin(o void).


Tener un identificador y una lista de argumentos que pueden estar vaca.
Para llamar a un mtodo en una estructura se usa la misma notacin de puntos que
para acceder a un mtodo de clase.

Las propiedades de una estructura permiten leer, escribir y calcular valores usando
descriptores de acceso. A diferencia de los campos las propiedades no se consideran variables;
por tanto no designan espacios de almacenamiento; debido a esto no pueden ser pasadas
como parmetros ref o out.
Class DistanciaDosPuntos
{
Struct Punto
{
Private int X;
Public int X;
{
Get
{
Return X;
}
Set
{
X=value;
}
}
}

En el ejemplo anterior se asigna un valor al miembro X de la estructura Punto y luego retorna


este valor.
El uso de propiedades es una forma de leer, escribir y calcular datos dentro de una estructura.
No hace falta incluir mtodos voluminosos para que realicen los clculos y se puede definir
como y cuando pueden actuar los descriptores de acceso get y set.

VI.

Enumeraciones

Un tipo de enumeracin (o enum) proporciona una manera eficaz de definir un conjunto de


constantes integrales con nombre que pueden asignarse a una variable.
Por ejemplo, supongamos que tenemos que definir una variable cuyo valor representar un
da de la semana. Slo hay siete valores significativos que almacenar dicha variable. Para
definir esos valores, se puede utilizar un tipo de enumeracin, que se declara mediante la
palabra clave enum:
enum Dias { Lunes, Martes, Miercoles, Jueves, Viernes, Sabado, Domingo };
enum Meses : byte { Ene, Feb, Mar, Abr, May, Jun, Jul, Ago, Sep, Oct, Nov, Dec };
Para entender bien la principal utilidad de las enumeraciones vamos a ver antes un problema
muy tpico en programacin:
Si queremos definir un mtodo que pueda imprimir por pantalla un cierto texto con diferentes
tamaos, una primera posibilidad sera dotarlo de un parmetro de algn tipo entero que
indique el tamao con el que se desea mostrar el texto.
La sintaxis completa que se puede usar para definir una enumeracin es:

En realidad una enumeracin es un tipo especial de estructura donde System.ValueType es


padre de ella, que slo puede tener como miembros campos pblicos constantes y estticos.
El tipo por defecto de las constantes que forman una enumeracin es int, aunque puede
drseles cualquier otro tipo bsico entero (byte, sbyte, short, ushort, uint, int, long o ulong)
indicndolo en <tipoBase>.
Al hacer esto se debe tener muy presente que el compilador de C# slo admite que se
indiquen as los alias de estos tipos bsicos, pero no sus nombres reales
(System.Byte,System.SByte, etc.)

Si no se especifica valor inicial para cada constante, el compilador les dar por defecto valores
que empiecen desde 0 y se incrementen en una unidad para cada constante segn su orden de
aparicin en la definicin de la enumeracin:

El valor asociado a Pequeo ser 0, el asociado a Mediano ser 5, y el asociado a Grande ser 6
ya que como no se le indica explcitamente ningn otro se considera que este valor es el de la
constante anterior ms 1.
Las variables de tipos enumerados se definen como cualquier otra variable
<nombreTipo> <nombreVariable>
Por ejemplo:
Tamao t;
Uso de las enumeraciones
Se puede declarar una enumeracin en C# usando la siguiente sintaxis:
La palabra clave enum
Un identificador de enumeracin
Un tipo base opcional
Identificadores de valor de enumeracin separados por comas y entre llaves

Todas las asignaciones explicitas de valor deben usar valores que estn incluidos dentro de los
lmites validos del tipo subyacente de la enumeracin; por ejemplo:
enum Fecha: uint
{
dia = 1;
mes = -2;
}
Esta declaracin es un error porque el tipo subyacente es uint y las asignaciones usan valores
negativos que estn fuera de los valores legales de uint.
Para hacer referencia a los literales de una enumeracin se usa la sintaxis:
<nombreEnumeracin>.<nombreLiteral>

El nico sitio donde no es necesario preceder el nombre del literal de


<nombreEnumeracion>. es en la propia definicin de la enumeracin, como tambin ocurre
con cualquier constante esttica.
Los literales de una enumeracin son constantes de tipos enteros y las variables de tipo
enumerado son variables del tipo entero base de la enumeracin. Por eso es posible
almacenar valores de enumeraciones en variables de tipos enteros y valores de tipos enteros
en variables de enumeraciones.
Por Ejemplo:
Tamao t = (Tamao) 0;
Tamao.Pequeo (=0)
t = (Tamao) 100;

Dado que los valores de una enumeracin son enteros, es posible aplicarles muchas de las
operaciones que se pueden aplicar a los mismos: ==, !=, <, >, <=, >=, +, -, ^, &, |, ~, ++, - y sizeof. Sin embargo, hay que concretar que los operadores binarios +y no pueden
aplicarse entre dos operandos de enumeraciones, sino que al menos uno de ellos ha de ser un
tipo entero; y que |, & y^ slo pueden aplicarse entre enumeraciones.
La clase System.Enum
Todos los tipos enumerados derivan de System.Enum, que deriva de System.ValueType y sta
a su vez deriva de la clase primigenia System.Object. Aparte de los mtodos heredados de
estas clases padres ya estudiados, toda enumeracin tambin dispone de otros mtodos
heredados de System.Enum, los principales de los cuales son:
static Type getUnderlyingType(Type enum): Devuelve un objeto System.Type con informacin
sobre el tipo base de la enumeracin representada por el objeto System.Type que se le pasa
como parmetro.
string ToString(string formato): Cuando a un objeto de un tipo enumerado se le aplica el
mtodo ToString() heredado de object, lo que se muestra es una cadena con el nombre del
literal almacenado en ese objeto.
Console.WriteLine(t.ToString("X"));

static string Format(Type enum, object valorLiteral, string formato): Funciona de forma
parecida a la sobrecarga de ToString(), slo que ahora no es necesario disponer de ningn
objeto del tipo enumerado cuya representacin de literal se desea obtener sino que basta
indicar el objeto Type que lo representa y el nmero del literal a obtener. Por ejemplo:
Console.Write(Enum.Format(typeof(Tamao), 0, "G");

Si el valorLiteral indicado no estuviese asociado a ningn literal del tipo enumerador


representado por enum, se devolvera una cadena con dicho nmero. Por el contrario, si
hubiese varios literales en la enumeracin con el mismo valor numrico asociado, lo que se
devolvera sera el nombre del declarado en ltimo lugar al definir la enumeracin

static object Parse(Type enum, string nombre, bool mayusculas): Crea un objeto de un tipo
enumerado cuyo valor es el correspondiente al literal de nombre asociado nombre. Si la
enumeracin no tuviese ningn literal con ese nombre se lanzara una ArgumentException, y
para determinar cmo se ha de buscar el nombre entre los literales de la enumeracin se
utiliza el tercer parmetro que indica si se ha de ignorar la capitalizacin al buscarlo. Un
ejemplo del uso de este mtodo es:
Tamao t = (Tamao) Enum.Parse(typeof(Tamao), "Pequeo");
Console.WriteLine(t) // Muestra Pequeo
Aparte de crear objetos a partir del nombre del literal que almacenarn, Parse() tambin
permite crearlos a partir del valor numrico del mismo. Por ejemplo:
Tamao t = (Tamao) Enum.Parse(typeof(Tamao), "0");
Console.WriteLine(t) // Muestra Pequeo
En este caso, si el valor indicado no se correspondiese con el de ninguno de los literales de la
enumeracin no saltara ninguna excepcin, pero el objeto creado no almacenara ningn
literal vlido. Por ejemplo:
Tamao t = (Tamao) Enum.Parse(typeof(Tamao), "255");
Console.WriteLine(t) // Muestra 255
static object[] GetValues(Type enum): Devuelve una tabla con los valores de todos los literales
de la enumeracin representada por el objeto System.Type que se le pasa como parmetro.
Por ejemplo:
object[] tabla = Enum.GetValues(typeof(Tamao));
Console.WriteLine(tabla[0]); // Muestra 0, pues Pequeo = 0
Console.WriteLine(tabla[1]); // Muestra 1, pues Mediano = 1
Console.WriteLine(tabla[2]); // Muestra 1, pues Grande =

Pequeo+Mediano

static string GetName(Type enum, object valor): Devuelve una cadena con el nombre del
literal de la enumeracin representada por enum que tenga el valor especificado en valor. Por
ejemplo:
Console.WriteLine(Enum.GetName(typeof(Tamao),0)); //Imprime Pequeo
Si la enumeracin no contiene ningn literal con ese valor devuelve null, y si tuviese varios con
ese mismo valor devolvera slo el nombre del ltimo. Si se quiere obtener el de todos es
mejor usar GetNames(), que se usa como GetName()
pero devuelve unstring[] con los

nombres de todos los literales que tengan el valor indicado ordenados segn su orden de
definicin en la enumeracin.
static bool isDefined (Type enum, object valor): Devuelve un booleano que indica si algn
literal de la enumeracin indicada tiene el valor indicado.

Vous aimerez peut-être aussi