Está en la página 1de 61

C# Bsico

C# Basico, II 1
Comentarios en C#
Son del mismo tipo que en C++:

// Es un comentario de una lnea

/*
Es un comentario de ms de una lnea
*/

C# Basico, III 2
Palabras reservadas
abstract, as, base, bool, break, byte, case, catch,
char, checked, class, const, continue, decimal,
default, delegate, do, double, else, enum, event,
explicit, extern, false, finally, fixed, float, for,
foreach, goto, if, implicit, in, int, interface,
internal, is, lock, long, namespace, new, null,
object, operator, out, override, params,
private,protected, public, readonly, ref, return,
sbyte, sealed, short, sizeof, stackalloc, static,
string, struct, switch, this, throw, true, try, typeof,
uint, ulong, unchecked, unsafe, ushort, using,
C# Basico, II 3
virtual, void, while
Identificadores en C#

Al igual que en C++ pero con la diferencia de que se pueden usar la


ee () y el acento ( ).
Aunque lo antes indicado es posible, NO ES RECOMENDABLE, por
asunto de tener un estilo estndar de cdigo
Al igual que en cualquier lenguaje de programacin, en C# un
identificador no es ms que, como su propio nombre indica, un
nombre con el que identificaremos algn elemento de nuestro
cdigo, ya sea una clase, una variable, un mtodo, etc.

C# Basico, III 4
Tipos de datos en C#
Un tipo es una categora, especie o clase cuyos constituyentes
comparten caractersticas comunes que permiten distinguir entre uno y
otro.

En un entorno de programacin dado, los tipos determinan los datos y


las operaciones que se pueden realizar sobre ellos.

C# Basico, III 5
Tipos de datos en C#
En C#, la informacin almacenada en un tipo puede
incluir:

El espacio de almacenamiento requerido por una variable de dicho


tipo
El rango de valores [ mnimo, mximo ] que puede representar
Los miembros ( mtodos, campos, ... ) a los que puede acceder.
Las operaciones que son permitidas.
El tipo base del cual desciende.
La posicin de RAM asignada en tiempo de ejecucin

C# Basico, III 6
Tipos de datos en C#
C# es un lenguaje fuertemente tipiado. Cada variable o constante tiene un tipo, as como
tambin cada expresin que evala a un valor. Cada firma de mtodo especifica un tipo
para cada parmetro y para el valor de retorno.

Un programa tpico de C# utiliza los tipos provenientes de la biblioteca de clases, as


como tipos definidos por el usuario que modelan los conceptos que son especficos del
dominio del problema del programa.

Por defecto, los tipos de uso ms frecuente de la biblioteca de clases del Framework
.NET estn disponibles en cualquier programa de C# (System). Otros tipos estarn
disponibles agrega explcitamente, mediante using, una referencia al namespace que lo
contiene.

Despus de que el compilador tiene una referencia namespace puede declarar variables
(y constantes) de los tipos declarados en dichos namespace..

C# Basico, III 7
Tipos de datos en C#
Tipos intrnsecos o predefinidos del lenguaje

C # proporciona un conjunto estndar de tipos numricos intrnsecos para


representar valores enteros, de punto flotante, expresiones booleanas,
caracteres de texto, valores decimales y otros tipos de datos.

C# Basico, III 8
Tipos de datos en C#

En C#, todos los tipos derivan de la clase base System.Object

Todos los tipos, incluidos los tipos numricos predefinidos, derivan en


ltima instancia de un solo tipo de base, que es System.Object.

En C# hay dos tipos de datos:

Intrnsecos o predefinidos (built-in)

Definidos por el desarrollador ( user-defined types ).

C# Basico, III 9
Tipos de datos en C#
Intrnsecos o predefinidos (built-in)
Types built-in C# types
Type Bytes Description Default
value
byte 1 unsigned byte 0
sbyte 1 signed byte 0
El tipo char
short 2 signed short 0
representa un
ushort 2 unsigned short 0
carcter UNICODE,
int 4 signed integer 0
uint 4 unsigned integer 0
lo cual permite
long 8 signed long 0L
representar
ulong 8 unsigned long 0
cualquier carcter
float 4 floating point number 0.0f
de cualquier
double 8 double precision number 0.0d
lengua.
decimal 8 fixed precision number 0.0m
string Unicode string
char 2 Unicode char
bool 4 true, false boolean

C# Basico, III 10
Tipos de datos en C#
Resumen de los tipos de datos de C# con su rango o precision

C# Basico, III 11
Tipos de datos en C#
Tipos de
datos del
sistema

C# Basico, III 12
Tipos de datos en C#
Definidos por el desarrollador (user-defined types)

Tipos class
Tipos struct
Tipos Interface
Tipos enum

Segn la parte de RAM que usan, los tipos se dividen en dos categoras:

Tipo valor

Tipo referencia
..

C# Basico, III 13
Tipos de datos en C#
Los tipos valor Son asignados en el stack de la
RAM.

Los tipos valor incluyen:

Todos los tipos predefinidos


Los tipos structs
Los tipos enum

C# Basico, III 14
Tipos de datos en C#
El tipo struct en C# .NET :
Un tipo struct es un tipo de valor que se suele utilizar para encapsular
pequeos grupos de variables relacionadas, como las coordenadas de un
rectngulo o las caractersticas de un elemento de un inventario. En el ejemplo
siguiente se muestra una declaracin de struct sencilla.

Los structs tambin pueden contener constructores, constantes, campos,


mtodos, propiedades, indizadores, operadores, eventos y tipos anidados,
aunque si se requieren estos miembros, se debe considerar la posibilidad de
crear una clase en vez de un tipo.

C# Basico, III 15
/*
Struct1.cs
csc.exe 4.5

Ferreiras / C# / Tipos de datos en C#/ struct

*/

using System;

struct Delincuente {

// En C#, por defecto, los miembros una struct son private.


// A diferencia de C++, que son public

// public string nombre; // ERROR: es un tipo referencia


// ulong cedula = 1234567; // ERROR: lab0607042014.cs(36,13): error CS0573
// : 'Delincuente.cedula': cannot have
// instance field initializers in structs
public ulong cedula;
public double montoRobado ;

C# Basico, III 16
Struct1.cs

// todos los miembros de una struct deben ser inicializados de esta manera, con un constructor
/*

public Delincuente( ulong ced, double mo) {


cedula = ced;
montoRobado = mo;
}

*/

public void mostrarDatos() { // Un metodo que se define dentro de la struct


Console.WriteLine(cedula);
Console.WriteLine(montoRobado);
}
}

C# Basico, III 17
Struct1.cs
// Testing

class EstructuraDelincuente {
public unsafe static void Main() {

/*
Delincuente de = new Delincuente(99999, 1234.56);

- ERROR CS0227: Unsafe code may only appear if compiling with /unsafe
- El uso de new implica el uso implicito de puntero lo cual, como veremos en el tema
de punteros, es en C# un modo unsafe.
*/

Delincuente de;
de.cedula = 888888;
de.montoRobado = 65748374;
de.mostrarDatos();
}
}

C# Basico, III 18
Struct1.cs
/*

D:\Ferreiras2\C#, Mi Codigo C#>csc /unsafe Struct1.cs


Microsoft (R) Visual C# 2008 Compiler version 3.5.30729.1
for Microsoft (R) .NET Framework version 3.5
Copyright (C) Microsoft Corporation. All rights reserved.

D:\Ferreiras2\C#, Mi Codigo C#>Struct1


888888
65748374

D:\Ferreiras2\C#, Mi Codigo C#>

*/

C# Basico, III 19
/*
Struct1b.cs
csc.exe 4.5

Ferreiras / C# / Tipos de datos en C#/ struct

Uso de un constructor para inicializar los miembros de la struct


( mas adelante, en el tema de clases, se amplia el concepto constructor ). Un avance:
Un constructor es un metodo que tiene el mismo nombre dela struct y no retorna ningun
tipo de valor, aunque si puede tener parametros para enviarle argumentos. En el tema
clases ampliaremos mas.
*/

using System;

struct Delincuente {
public ulong cedula;
public double montoRobado ;
// todos los miembros de una struct deben ser inicializados de esta manera, con un constructor
public Delincuente( ulong ced, double mo) {
cedula = ced;
montoRobado = mo;
}
public void mostrarDatos() {
Console.WriteLine(cedula);
Console.WriteLine(montoRobado);
}
} C# Basico, III 20
Struct1b.cs

// Testing

class EstructuraDelincuente {
public unsafe static void Main() {

Delincuente de = new Delincuente(99999, 1234.56);


de.mostrarDatos();

// Delincuente de;
de.cedula = 888888;
de.montoRobado = 65748374;
de.mostrarDatos();
}
}

C# Basico, III 21
Struct1b.cs

/*

D:\Ferreiras2\C#, Mi Codigo C#>csc /unsafe Struct1b.cs


Microsoft (R) Visual C# 2008 Compiler version 3.5.30729.1
for Microsoft (R) .NET Framework version 3.5
Copyright (C) Microsoft Corporation. All rights reserved.

D:\Ferreiras2\C#, Mi Codigo C#> Struct1b

99999
1234.56
888888
65748374

D:\Ferreiras2\C#, Mi Codigo C#>

*/

C# Basico, III 22
Tipos de datos en C#
Tipo enum

enum (C# Reference)


http://msdn.microsoft.com/en-us/library/sbbt4032.aspx

La palabra clave enum se utiliza para declarar una enumeracin, un tipo


que consiste de un conjunto de constantes con nombres en MAYUSCULA
llamada la lista de enumeradores.

C# Basico, III 23
/*
enum0.cs

Ferreiras / C# / tipos de datos C# / enum

*/

using System;

// Tester class

class Fofi {

enum Nota { EXCELENTE, BUENO, REGULAR, MALO };

public static void Main() {

Console.WriteLine( "\nEXCELENTE esta en la posicion " + (int)Nota.EXCELENTE );


Console.WriteLine( "\nBUENO esta en la posicion " + (int)Nota.BUENO );
Console.WriteLine( "\nREGULAR esta en la posicion " + (int)Nota.REGULAR );
Console.WriteLine( "\nMALO esta en la posicion " + (int)Nota.MALO );
}
}

C# Basico, III 24
enum0.cs

D:\Ferreiras2\C#, Mi Codigo C#> csc enum0.cs


Microsoft (R) Visual C# 2008 Compiler version 3.5.30729.1
for Microsoft (R) .NET Framework version 3.5
Copyright (C) Microsoft Corporation. All rights reserved.

D:\Ferreiras2\C#, Mi Codigo C#>enum0

EXCELENTE esta en la posicion 0

BUENO esta en la posicion 1

REGULAR esta en la posicion 2

MALO esta en la posicion 3

D:\Ferreiras2\C#, Mi Codigo C#>

C# Basico, III 25
Tipos de datos en C#
Los tipos referencia:

Son creados usando el operador new ( A diferencia de C++, no hay un


operador delete para estos tipos con el cual borrarlos explcitamente ).

Son asignados en el heap de la RAM y son recolectados como basura


(garbage collector ) cuando ya no son usados.

Son colectados automticamente por el garbage collector.

Incluyen: Mas adelente sern tratados


Los tipos class
estos temas
Los tipos interface
Los tipos collection, como el tipo array ( el cual deriva de la clase System.Array )
Los tipos string ( El cual es un alias de la clase System.String )
Los tipo delegate ( ver http://msdn.microsoft.com/en-us/library/ms173171.aspx)

C# Basico, III 26
Tipos de datos en C#
Otra categora de tipo en C# son tipo puntero :

Usan la misma sintaxis de C++:

tipo * unPuntero; // declaracin de un puntero a un tipo ( cualquiera de


los anteriores )

En el contexto de C#, el cdigo que usa el tipo puntero es cdigo inseguro

En el tema Punteros en C#, retomaremos el asunto.

Ver mas en http://msdn.microsoft.com/en-us/library/y31yhkeb.aspx

...

C# Basico, III 27
typeof en C#
Es un operador de informacin de tipo utilizado para obtener el objeto
System.Type1 correspondiente a un tipo.
Retorna un objeto de tipo Type
La sintaxis de uso es: Type t = typeof(tipo); Donde:

Type Es la clase Type

La clase Type representa declaraciones de tipos: tipos de clase, tipos de


interfaz, tipos de arreglo, tipos de valor, tipos de enumeracin, parmetros de tipo,
definiciones de tipo genrico y tipos genricos construidos abiertos o cerrados.
Utilizar los miembros de Type para obtener informacin acerca de una
declaracin de tipos.

typeof Es el operador typeof

tipo Es el tipo para el cual se quiere obtener el objeto System.

1: Ver Type (clase) en http://msdn.microsoft.com/es-es/library/system.type(v=vs.110).aspx

C# Basico, III 28
typeof en C#
/*
TypeofExample.cs

Ferreiras / C# / Operadores de informacion de tipo / tipeof

*/

using System;

namespace Ferreiras {
class TypeofExample {
static void Main() {
double unDoble = 0.0034; // Si no es inicializada, ERROR: Use of unassigned local variable
float unFlotante = 35.44f; // Si no es inicializada, ERROR: Use of unassigned local variable

TypeofExample obj1 = new TypeofExample() ;


Type t1 = typeof(TypeofExample); // El objeto Type retornado por typeof es asignado a t1
Console.WriteLine( "\n{0}", t1.ToString() );
/*
Object.ToString es el mtodo que Devuelve una cadena que representa al objeto actual.
*/

C# Basico, III 29
typeof en C#
// TypeofExample.cs - continuacin

Type t2 = unDoble.GetType();
Console.WriteLine(t2.ToString());
Type t3 = unDoble.GetType();
/*
El mtodo Object.GetType obtiene el objeto Type de la instancia actual
*/
Console.WriteLine(t3.ToString());
Type t4 = unFlotante.GetType();
Console.WriteLine(t4.ToString());
}
}
}

D:\Ferreiras2\C#, Mi Codigo C#> TypeofExample

Ferreiras.TypeofExample
System.Double
System.Double
System.Single

D:\Ferreiras2\C#, Mi Codigo C#>


C# Basico, III 30
Secuencias de escape en C#
Secuencia de escape Representa
\a Campana (alerta)
\b Retroceso
\f Avance de pgina
\n Nueva lnea
\r Retorno de carro
\t Tabulacin horizontal
\v Tabulacin vertical
\' Comilla simple
\" Comillas dobles
\\ Barra diagonal inversa
\? Signo de interrogacin literal
\ ooo Carcter ASCII en notacin octal
\x hh Carcter ASCII en notacin hexadecimal

Carcter Unicode en notacin hexadecimal si esta secuencia de escape se utiliza


en una constante de caracteres anchos o un literal de cadena Unicode.
\x hhhh
Por ejemplo: WCHAR f = L'\x4e00' o WCHAR b[] = L"The Chinese character
for one is \x4e00". C# Basico, III 31
Variables en C#
Las variables en C# son casi igual que en C++, con excepcin de las
siguientes diferencias:
Requieren ser inicializadas antes de su uso, de lo contrario, se
generar un error en tiempo de compilacin, esto es, acceder a una
variable inicializada es imposible en C#.

No se puede acceder a un puntero loco ( dangling pointer )

Una expresin que un elemento de un arreglo ms all de sus


lmites no es accesible.

No hay variables o funciones globales en C#, el comportamiento de


las variables globales se logra a travs funciones estticas y variables
estticas.

C# Basico, III 32
Operadores
Un operador en C# es un smbolo formado por uno o
ms caracteres que permite realizar una
determinada operacin entre uno o ms datos y
produce un resultado.
A continuacin se describen cules son los
operadores incluidos en el lenguaje clasificados segn
el tipo de operaciones que permiten realizar, aunque hay
que tener en cuenta que C# permite la redefinicin del
significado de la mayora de los operadores segn el
tipo de dato sobre el que se apliquen, por lo que lo que
aqu se cuenta se corresponde con los usos ms
comunes de los mismos:
C# Basico, II 33
Operadores aritmticos
Los operadores aritmticos incluidos en C# son los
tpicos de suma (+), resta (-), producto (*), divisin (/) y
mdulo (%) Tambin se incluyen operadores de menos
unario () y ms unario (+)

Relacionados con las operaciones aritmticas se


encuentran un par de operadores llamados checked y
unchecked que permiten controlar si se desea detectar
los desbordamientos que puedan producirse si al
realizar este tipo de operaciones el resultado es
superior a la capacidad del tipo de datos de sus
operandos.
C# Basico, II 34
Operadores lgicos
Se incluyen operadores que permiten realizar las operaciones
lgicas tpicas: and (&& y &), or (|| y |), not (!) y xor (^)

Los operadores && y || se diferencia de & y | en que los primeros


realizan evaluacin perezosa y los segundos no. La evaluacin
perezosa consiste en que si el resultado de evaluar el primer
operando permite deducir el resultado de la operacin, entonces no
se evala el segundo y se devuelve dicho resultado directamente,
mientras que la evaluacin no perezosa consiste en evaluar
siempre ambos operandos. Es decir, si el primer operando de una
operacin && es falso se devuelve false directamente, sin evaluar el
segundo; y si el primer operando de una || es cierto se devuelve
true directamente, sin evaluar el otro.

C# Basico, II 35
Operadores relacionales
Se han incluido los tradicionales
operadores de igualdad (==), desigualdad
(!=), mayor que (>), menor que (<),
mayor o igual que (>=) y menor o igual
que (<=)

C# Basico, II 36
Operadores de manipulacin de
bits
Se han incluido operadores que permiten
realizar a nivel de bits operaciones and (&),
or (|), not (~), xor (^), desplazamiento a
izquierda (<<) y desplazamiento a derecha (>>)
El operador << desplaza a izquierda rellenando
con ceros, mientras que el tipo de relleno
realizado por >> depende del tipo de dato sobre
el que se aplica: si es un dato con signo
mantiene el signo, y en caso contrario rellena
con ceros
C# Basico, II 37
Otros operadores
Otros operadores:
min=a<b ? a:b; // if a<b min=a else min=b;
. para acceso a miembros, e.j. args.Length
() para conversin de tipos
[] como ndice de arrays, punteros, propiedades y
atributos
new para crear nuevos objetos
typeof para obtener el tipo de un objeto
is para comparar el tipo de un objeto en runtime
sizeof para obtener el tamao de un tipo en bytes
* para obtener la variable a la que apunta un
puntero
->, p->m es lo mismo que (*).m
& devuelve la direccin de un operando
C# Basico, II 38
1
Arreglos en C#
En C#, los arreglos funcionan de manera similar a como lo hacen en la mayora
de los lenguajes de programacin. Sin embargo, se debe tener en cuenta que en
C#:

Los arreglos son objetos y


Los corchetes se colocan despus del tipo y no despus del nombre de
la variable. Los parntesis despus del identificador generan un error de
compilacin.
El tamao del arreglo no es parte de su tipo como en C/C++. Esto permite
declarar un arreglo y asignarle cualquier cantidad de elementos.
Son asignados en el heap de la RAM, por lo cual son tipo referencia.
No se permite acceder a elementos fuera de los lmites del arreglo
Se proporciona la funcin foreach para iterar el arreglo.
Se permite crear localizaciones de elementos usando el operador new.

1
: Ver Arrays Tutorial en http://msdn.microsoft.com/en-us/library/aa288453(v=vs.71).aspx

C# Basico, III 39
Arreglos en C#
/*
ArraysEjemplo.cs

Ferreiras / C# / Arreglos/ declaracin, inicializacin

*/

using System;

class ArraysEjemplo {

static void Main() {

// int arreglo [ ]; // ERROR: Bad array declarator:


// declara arreglo1 como un arreglo de cualquier tamao
// el tamao del arreglo no es parte de su tipo, como en C/C++
// o sea, que en los [ ] no se ponen nmeros, Zoquete !!
// el tamo se asigna con new, simplemente, con los { }
int[ ] arreglo1;
arreglo1 = new int[13]; // 13 elementos
arreglo1 = new int[6]; // 6 elementos
// declara un arreglo 1D
int [ ] array1 = new int[5];
C# Basico, III 40
Arreglos en C#
ArraysEjemplo.cs - continuacin -

class ArraysEjemplo {
static void Main() {
// declara e inicializa un arreglo 1D
int[ ] array2 = new int[ ] { 1, 3, 5, 7, 9 };
// array2 inicializado con otro tamao
array2 = new int[ ] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// declara e inicializa un arreglo 1D
int[ ] array3 = { 1, 2, 3, 4, 5, 6 };
// declara un arreglo 2D, de 2 filas X 3 columnas
int [ , ] array2D = new int[2, 3];
// declara e inicializa un arreglo 2D de 2 filas X 3 columnas
int [ , ] otroArray2D = { { 1, 2, 3 }, { 4, 5, 6 } };
// declara un arreglo de arreglo de arreglo
// // el primero tiene un tamao de 6 elementos
int [ ] [ ] array4 = new int[6][ ];
// establece valores para los elementes del primer arreglo del anterior.
array4[0] = new int[8] { 1, 2, 3, 4, 5, 6, 7, 8 };
// observe que se cambi el tamao del primer arreglo
array4[9 ] = new int[7] { 1, 2, 3, 4, 5, 6, 7 };
}
} C# Basico, III 41
Arreglos en C#
/*
Arreglo2D.cs

Ferreiras / C# / arreglos

*/

using System;

class Arreglo2D {
static void Main() {
int i, j;
// declaracin de arreglo
string [ , ] Libros = new string[3,3]; // 3 X 3 = 9 elementos en total
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
Console.Write("\nEntre el nombre del libro [ {0}, {1} ] = ", i, j );
Libros[i,j] = Console.ReadLine();
}
}
C# Basico, III 42
Arreglos en C#
Arreglo2D.cs - continuacin

Console.WriteLine("\n\n*****************************************");
Console.WriteLine("Los libros almacenados en el arreglo son: \n\n");

// formatear la salida
Console.Write("\t1\t2\t3\n\n");
for (i = 0; i < 3; i++) {
Console.Write("{0}.\t", i + 1);
for (j = 0; j < 3; j++) {
Console.Write("{0}\t", Libros[i,j]);
}
Console.Write("\n");
}
Console.WriteLine("\n\n*****************************************");
Console.WriteLine("\nPULSAR <ENTER> PARA CONTINUAR");
Console.ReadLine();
}
}

C# Basico, III 43
Arreglos en C#
Arreglo2D.cs - continuacin

D:\Ferreiras2\C#, Mi Codigo C#>Arreglo2D

Entre el nombre del libro [ 0, 0 ] = ADA

Entre el nombre del libro [ 0, 1 ] = FORTRAN

Entre el nombre del libro [ 0, 2 ] = BBX

Entre el nombre del libro [ 1, 0 ] = PROLOG

Entre el nombre del libro [ 1, 1 ] = C#

Entre el nombre del libro [ 1, 2 ] = F#

Entre el nombre del libro [ 2, 0 ] = GO

Entre el nombre del libro [ 2, 1 ] = RUBY

Entre el nombre del libro [ 2, 2 ] = C


C# Basico, III 44
Arreglos en C#
Arreglo2D.cs - continuacin

*****************************************
Los libros almacenados en el arreglo son:

1 2 3

1. ADA FORTRAN BBX


2. PROLOG C# F#
3. GO RUBY C

*****************************************

PULSAR <ENTER> PARA CONTINUAR

D:\Ferreiras2\C#, Mi Codigo C#>

C# Basico, III 45
Sentencias en C# I
Las sentencias pueden ocupar ms de una lnea y deben
terminarse con un ;
Grupos de sentencias se pueden agrupar en bloques con { y }
E.j:

int i, j;
// un sentencia simple
i=1;
// un bloque de sentencias
{
j=2;
i=i+j;
}
Sentencias en C# II
if, sirve para saltar en base a una condicin:

if (i<5) // una sentencia slo parte if


System.Console.WriteLine("i < 5");

if (i<5) // una sentencia con parte if y else


System.Console.WriteLine("i<5");
else
System.Console.WriteLine("i>=5);
if (i<5) { // bloque de sentencias con parte if y else
System.Console.WriteLine("i<5");
System.Console.WriteLine("i es ms pequeo");
} else {
System.Console.WriteLine("i>=5");
System.Console.WriteLine("i NO es ms pequeo");
}
Sentencias en C# III
do, sirve para repeticiones de sentencia que se ejecutan al
menos una vez:
int i=1;
do
System.Console.WriteLine(i++);
While (i<=5);

while, para repeticiones de 0 a N veces


int i=1;
While (i<=5)
System.Console.WriteLine(i++);
Sentencias en C# IV
for, se usa cuando el nmero de repeticiones se conoce a
priori
for (int i=1; i<=5; i++)
System.Console.WriteLine(i); // Visualiza digitos 1 a 5
La primera expresin es de inicializacin, declara un entero
La segunda la condicin del bucle
La tercera es la expresin del iterador
Un bucle infinito se podra codificar como:
for (;;) {
// bucle infinito
...
}
Se pueden insertar mltiples expresiones:
for (int i=1, j=2; i<=5; i++, j+=2) {
System.Console.WriteLine("i=" + i + ", j=" + j);
Sentencias en C# V
continue, se usa para saltar el resto de la iteracin y
comenzar la siguiente
for (int i=1; i<=5; i++) {
if (i==3)
continue;
System.Console.WriteLine(i);
}

break se usa para salir de un bucle:


for (int i=1; i<=5; i++) {
if (i==3)
break;
System.Console.WriteLine(i);
}
Sentencias en C# VI
Sirve para seleccionar entre mltiples opciones posibles
uint i=2;
switch(i) {
case 0:
goto case 2; // para permitir varios casos usar goto
case 1:
goto case 2;
case 2:
System.Console.WriteLine("i<3");
break; // el uso de goto o break es obligatorio
case 3:
System.Console.WriteLine("i==3"),
break;
default:
System.Console.WriteLine("i>3");
break;
}
foreach
Es una estructura de control tipo bucle o ciclo, usada en C# para repetir o iterar al travs de un
bloque de sentencias para cada elemento en un array u objeto de tipo Collection.

Se debe utilizar para leer y no se recomienda su uso cambiar el contenido de los objetos Collection
porque puede tener resultados imprevisibles.

Su sintaxis es como sigue:

foreach ( tipo identificador in expresion ) {


// cuerpo del bucle
}

Donde:

tipo Es el tipo del identificador

identificador Nombre de un iterador que identifica cada elemento del array u objeto Collection.

Expresion Un objeto Collection o array

Cuerpo del bucle Es el bloque de cdigo que se ejecutar en cada recorrido del bucle o ciclo.

El cdigo se ejecuta para cada elemento del array u objeto Collection. Despus, el control pasa a la
siguiente sentencia del cuerpo del bucle.
C# Basico, III 52
foreach
foreach no usa un ndice entero. En su lugar, usa una Collection y retorna cada uno
de los elementos en orden, eliminando un posible error causado por manejo
incorrecto del ndice de la Collection.

En la sentencia de un foreach no es necesario especificar los lmites mnimos y


mximos, y, tampoco, es necesario usar variable entera para el control de la
ejecucin, como en el bucle for.

La palabra reservada de C# in debe ser especificada y entonces el ID del objeto


Collection o arreglo, sobre el cual se vas a iterar.

C# Basico, III 53
foreach
/*
Foreach2.cs

Ferreiras / C# / foreach

*/

using System;

class Foreach2 {
static void Main() {

// arreglo para ser iterado con foreach

string[] nombreLargo = {
"SHAKESPEARE MOZART ARMSTRONG CORREA PEREZ",
"DISNEY LANDIA RODRIGUEZ JUAREZ",
"FLORES DE VALGAZ ALAYA ADOLFO HITLER",
"USNAY MARINA PEREZ CONZALEZ",
"EMAIL SUAREZ BARBOZA",
"YAM CLOCK ALEJANDRO PIZARRO ROJAS"
};

C# Basico, III 54
foreach
Foreach2.cs -continuacin-

Console.WriteLine("\n");
// bucle con foreach
foreach ( string control in nombreLargo ) {
Console.WriteLine(control);
}
}
}

C# Basico, III 55
foreach
Foreach2.cs -continuacin-

/*

D:\Ferreiras2\C#, Mi Codigo C#>csc Foreach2.cs


Microsoft (R) Visual C# 2008 Compiler version 3.5.30729.1
for Microsoft (R) .NET Framework version 3.5
Copyright (C) Microsoft Corporation. All rights reserved.

D:\Ferreiras2\C#, Mi Codigo C#> Foreach2

SHAKESPEARE MOZART ARMSTRONG CORREA PEREZ


DISNEY LANDIA RODRIGUEZ JUAREZ
FLORES DE VALGAZ ALAYA ADOLFO HITLER
USNAY MARINA PEREZ CONZALEZ
EMAIL SUAREZ BARBOZA
YAM CLOCK ALEJANDRO PIZARRO ROJAS

D:\Ferreiras2\C#, Mi Codigo C#>

*/

C# Basico, III 56
foreach
/*
foreachEjemplo.cs

Ferreiras / C# / foreach

*/

using System;

class ForeachEjemplo {

public static void Main() {


double [ , ] array2D = {
{ 345, 566, 385 },
{ 711, 874, 236 }
};
Console.WriteLine("\n");
int i = 0; //
foreach( int elemento in array2D ) {
Console.WriteLine( "El elemento {0} es = {1} ", i, elemento );
++i;
}
}
}
C# Basico, III 57
foreach
foreachEjemplo.cs -continuacin-

D:\Ferreiras2\C#, Mi Codigo C#> foreachEjemplo

El elemento 0 es = 345
El elemento 1 es = 566
El elemento 2 es = 385
El elemento 3 es = 711
El elemento 4 es = 874
El elemento 5 es = 236

D:\Ferreiras2\C#, Mi Codigo C#>

*/

C# Basico, III 58
Referencias
The C# Programming Language; Anders Hejlsberg, Scott Wiltamuth, Peter Golde; Microsoft
.NET Development Series; Addison-Wesley Professional, Pearson Education, Inc., Third
Edition, 2004

Types (C# Programming Guide)


http://msdn.microsoft.com/en-us/library/ms173104.aspx

C# Concisely; Judith Bishop, Nigel Hospool; Pearson, Addison Wisley 2003.

Head First C#; Andrew Stellman and Jennifer Greene ; Second Edition; OReilly Media, 2010.

Desarrollo de aplicaciones .NET con Visual C#; Miguel Rodrguez Gmez-Stern, Marcos
Antonio Besteiro Gorostizaga; McGra2-Hill/Interamericana de Espaa, S.A.U., 2002.

Visual C# Language
http://msdn.microsoft.com/en-us/library/aa287558(v=vs.71).aspx...

C# Basico, III 59
Referencias
C# Concisely; Judith Bishop, Nigel Hospool; Pearson, Addison Wisley 2003.

Head First C#; Andrew Stellman and Jennifer Greene ; Second Edition; OReilly
Media, 2010.

Desarrollo de aplicaciones .NET con Visual C#; Miguel Rodrguez Gmez-Stern,


Marcos Antonio Besteiro Gorostizaga; McGra2-Hill/Interamericana de Espaa,
S.A.U., 2002.

Visual C# Language
http://msdn.microsoft.com/en-us/library/aa287558(v=vs.71).aspx
...

C# Basico, II 60
Agradecimientos
Agradecimientos especiales al
Maestrsimo Felix Ferreiras por el aporte
de este valioso material para poder
impartir este curso.
Gracias maestro!!!