Documente Academic
Documente Profesional
Documente Cultură
[editar]Saltos incondicionales
using System;
namespace Ejemplos{
class Ejemplo4_1{
LlamadaOtraFuncion();
}
En el ejemplo anterior el programa ejecuta sentencia por sentencia el método
principal Main() hasta que encuentra la llamada a otro método. Después de
que el método llamado haya terminado el método Main continuará con la
ejecución de las sentencias restantes.
using System;
namespace Ejemplos
class Ejemplo4_2
int contador=0;
REPETIR:
[editar]Saltos condicionales
[editar]Instrucción if
if( condición ) {
instrucciones;
...
else {
instrucciones;
...
using System;
class InstruccionIf{
double d;
Console.WriteLine("Introduce un numero");
d = Double.Parse( Console.ReadLine() );
if( d>0 )
else
if( condicion1 )
instrucciones;
instrucciones;
...
else
instrucciones;
using System;
class IfElseIf{
string opcion;
Console.WriteLine("Elija una opción (si/no)");
opcion = Console.ReadLine();
if( opcion=="si" )
else{
le pide al usuario que elija una opción si/no y la procesa usando una
estructura if-else-if. Si la opción no es ni "si" ni "no", entonces se ejecuta la
sentencia else por defecto, que imprime por pantalla el mensaje "No
entiendo lo que ha escrito"
Nota: Hay que tener mucho cuidado que el simbolo = no es igual a ==, el
primero sirve para asignar un valor a una variable y el segundo sirve para
comparar si dos términos son iguales.
[editar]Instrucción switch
case constante1:
instrucciones;
break;
case constante2:
instrucciones;
break;
...
default:
instrucciones;
break;
using System;
class InstruccionSwitch{
string s;
s = Console.ReadLine();
switch(s){
case "+":
break;
case "-":
break;
case "*":
break;
case "/":
break;
default:
Console.WriteLine("No te entiendo");
break;
El cual solicita al usuario que inserte uno de los símbolos +-*/ , y con un
switch compara los resultados para hacer diferentes acciones dependiendo
del valor de s, que es la cadena de caracteres que almacena la elección del
usuario. El resultado debería ser algo parecido a esto:
Elige hacer algo con los números 2 y 3
+ para sumarlos
- para restarlos
* para multiplicarlos
El resultado es 6
Como habrá notado, al final de todo case siempre hay una sentencia break.
Esto no es obligatorio, puede haber en su lugar otra sentencia de salto como
un goto inclusive en el caso default.
Ejemplo:
using System;
class InstruccionSwitch{
int voto;
switch(voto){
case 1:
break;
case 3:
break;
case 4:
goto case 1;
default:
Console.WriteLine("No te entiendo");
break;
[editar]Bucle for
instrucciones;
using System;
class BucleFor{
Console.WriteLine( i );
using System;
class BucleFor2{
int i;
int j;
Por su parte, la expresión condicional del bucle for puede ser cualquier
expresión que genere un valor booleano. En este caso se ha usado "i<j", pero
también hubiera sido válida "i==5", "true" (el bucle se realizará
indefinidamente) o "false" (el bucle no se realizará).
[editar]Bucle while
while( condición )
instrucciones;
Donde la condición tiene que ser un valor booleano. Tiene una estructura
muy sencilla, así que vamos a ver directamente un ejemplo.
using System;
class BucleWhile{
int i = 0;
while( i<10)
Console.WriteLine( i );
i = i+1;
En el que se realiza lo mismo que en el ejemplo anterior, sólo que ahora con
un bucle while.
[editar]Bucle do-while
Se trata de una ligera variante del bucle anterior, con la diferencia de que
ahora primero se ejecutan las instrucciones y luego se evalúa la condición, de
forma que tiene tiene una estructura:
do{
instrucciones;
while( condición );
El siguiente ejemplo
using System;
class BucleDoWhile{
string s = "";
do
s = Console.ReadLine();
while( s != "si" );
[editar]Bucle foreach
instrucciones;
using System;
class BucleForeach{
Console.WriteLine( elem );
Este ejemplo sólo imprime los valores de una matriz, pero como se puede
comprobar mejora mucho la claridad del código comparándolo con una
implementación con bucles for como esta
using System;
class BucleForeach{
{
Console.WriteLine( arr[i,j] );
Además, es posible utilizar el bucle foreach con cualquier tipo que sea una
colección, no solo con arreglos, como veremos más adelante.
continue y break son dos palabras clave que nos permiten saltar
incondicionalmente al inicio de un bucle (continue) o fuera de un bucle
(break) cuando se necesite. Por ejemplo:
using System;
class continueBreak
if (i==5)
continue;
if (i==9)
break;
Console.Write("{0},",i);
}
Este pequeño programa entrará en un bucle for que hará que la variable i
tome los valores del 1 al 10, pero al llegar al número 5 el bucle saltará
incondicionalmente al inicio del bucle sin ejecutar las líneas que siguen más
adelante por lo que no ejecutará la línea que imprime en la pantalla el
número 5. Cosa similar sucede cuando llega al número 9: el bucle será
detenido por el salto incondicional break que romperá el bucle cuando
encuentre esta palabra. El resultado será el siguiente:
0,1,2,3,4,6,7,8,
El bucle saltó la línea que imprime 5 y terminó cuando llegó a 9 gracias a las
palabras clave continue y break.
SEGUNDO TUTORIAL
Versión para imprimir esta pagina
Contenido [ocultar]
1.1 Métodos
1.2.1 Parámetros
2.1 Propiedades
2.2 Indexadores
using System;
public int a = 1;
private double b = 3;
class UsoClase{
using System;
//definimos nuestra clase
class Clase1{
public int a = 1;
public double b = 3;
class UsoClase{
MiClase.Descripcion();
}
}
[editar]Métodos
* Tipo devuelto
return a/b;
using System;
class Metodo{
return a/b;
class Principal{
Console.WriteLine( m.Divide(8, 2) );
[editar]Parámetros
La declaración formal de parámetros también define
variables. Hay cuatro tipos de parámetros: parámetros por
valor, por referencia, parámetros de salida, y arreglos de
parámetros.
using System;
class Test {
p++;
int a = 1;
F(a);
}
muestra un método F que tiene un parámetro por valor
llamado p. El ejemplo produce la salida:
pre: a = 1
p=2
post: a = 1
using System;
class Test {
int t = a;
a = b;
b = t;
int x = 1;
int y = 2;
pre: x = 1, y = 2
post: x = 2, y = 1
[editar]Parámetro de salida
using System;
class Test {
static void Divide(int num1, int num2, out int result, out int
resid) {
int valor2 = 3;
[editar]Arreglo de parámetros
using System;
class Test
F();
F(1);
F(1, 2);
F(1, 2, 3);
nº de argumentos: 0
nº de argumentos: 1
args[0] = 1
nº de argumentos: 2
args[0] = 1
args[1] = 2
nº de argumentos: 3
args[0] = 1
args[1] = 2
args[2] = 3
nº de argumentos: 4
args[0] = 1
args[1] = 2
args[2] = 3
args[3] = 4
La mayoría de los ejemplos presentes en este capítulo
utilizan el método WriteLine de la clase Console. El
comportamiento para las sustituciones, como muestra el
ejemplo
int a = 1, b = 2;
using System;
namespace System
...
}
}
using System;
class Metodo{
return a/b;
class Principal{
Console.WriteLine( m.Divide(8, 2) );
using System;
class Metodo{
return a/b;
class Principal{
public static void Main()
Console.WriteLine( Metodo.Divide(8, 2) );
using System;
class Punto{
public double X;
public double Y;
double d;
return d;
class Principal{
A.X = 1;
A.Y = 1;
using System;
class Punto{
public double X;
public double Y;
X = 1;
Y = 1;
double d;
return d;
class Punto{
X = val1;
Y = val2;
...
[editar]Sobrecarga de métodos
using System;
class Eleva{
return a*a;
return a*a;
}
class Principal{
this.campo
double X;
double Y;
Complejo(double X, double Y)
this.X = X;
this.Y = Y;
[editar]Propiedades e indizadores
[editar]Propiedades
class TestProperties {
get
return clave;
set
clave = value;
class Test {
tp.Clave = c;
Console.WriteLine (tp.Clave);
[editar]Indexadores
using System;
class PruebaIndexadores
get
return tabla[indice];
set
tabla[indice] = value;
int a = obj[3];
obj[3] = 6;
a = obj[3];
TERCER TUTORIAL
Herencia
//miembros
using System;
class A{
class B : A{
}
class Principal{
clase_heredada.F();
clase_heredada.G();
base.nombre_del_miembro
class B : A{
base.F();
[editar]Clases Abstractas
Las clases abstractas son clases que contienen algún método
incompleto, esto es, que está definido pero no implementado. Por lo
tanto, no se pueden instanciar y su único propósito es servir de clase
base de las que se derivarán otras clases.
Las clases que heredan una clase abstracta deben implementar los
métodos incompletos. Las clases abstractas se declaran con la palabra
reservada abstract
using System;
abstract class A{
class B : A{
[editar]Miembros virtual
using System;
class A {
Console.WriteLine("A.F");
}
}
class B: A {
base.F();
Console.WriteLine("B.F");
class Test {
B b = new B();
b.F();
A a = b;
a.F();
[editar]Problemas propuestos
define readkey
using System;
namespace m7tr1x {
class Program
Console.ForegroundColor = ConsoleColor.DarkGreen;
Console.WindowLeft = Console.WindowTop = 0;
Console.WindowHeight = Console.BufferHeight =
Console.LargestWindowHeight;
Console.WindowWidth = Console.BufferWidth =
Console.LargestWindowWidth;
if readkey
Console.ReadKey();
endif
Console.CursorVisible = false;
int[] y;
int[] l;
while (true)
DateTime t1 = DateTime.Now;
ms = 10 - (int)((TimeSpan)(DateTime.Now -
t1)).TotalMilliseconds;
if (ms> 0)
System.Threading.Thread.Sleep(ms);
if (Console.KeyAvailable)
if (Console.ReadKey().Key == ConsoleKey.F5)
int x;
thistime = !thistime;
if (x % 11 == 10)
if (!thistime)
continue;
Console.ForegroundColor = ConsoleColor.White;
else
Console.ForegroundColor = ConsoleColor.DarkGreen;
Console.Write(R);
Console.ForegroundColor = ConsoleColor.Green;
Console.SetCursorPosition(x, y[x]);
Console.Write(R);
Console.Write(' ');
private static void Initialize(out int width, out int height, out int[] y,
out int[] l)
int h1;
width = Console.WindowWidth - 1;
y = new int[width];
l = new int[width];
int x;
Console.Clear();
y[x] = r.Next(height);
static char R
get
int t = r.Next(10);
if (t <= 2)
else if (t <= 4)
else if (t <= 6)
else
n = n % height;
if (n <0)
return n + height;
else
return n;
CUARTO TUTORIAL
Sobrecarga de operadores
// constructor de la clase
this.real = real;
this.img = img;
}
// propiedad Real
get{
return real;
set{
real = value;
// propiedad Img
get{
return img;
set{
img = value;
{
if ( img >= 0 )
else
[editar]Operadores binarios
[editar]Operadores Unarios
En esta sección se verá cómo sobrecargar los operadores unarios, es
decir aquellos que toman un solo operando, como por ejemplo a++. El
prototipo de los métodos que van a sobrecargar operadores unarios
será:
QUINTO TUTORIAL
Estructuras
Por ejemplo, el uso de una estructura más bien que una clase para un
Punto puede producir una gran diferencia en el número de
asignaciones producidas en memoria en tiempo de ejecución. El
siguiente programa crea e inicializa un arreglo de 100 puntos. Con
Punto implementado como clase, 101 objetos separados son
inicializados ( uno para el vector y uno para cada uno de los 100
elementos )
class Punto
public int x, y;
this.x = x;
this.y = y;
}
}
class Test
struct Punto
public int x, y;
this.x = x;
this.y = y;
[editar]Rendimiento
SEXTO TUTORIAL
Definición
bool Acelerar(int n)
//implementación de Acelerar
bool Frenar(int n)
{
//implementación de Frenar
Hay que tener en cuenta que siempre hay que poner la clase base
antes de las interfaces.
Ahora nuestra clase CocheDeportivo así como cualquier otra clase que
implemente IMovil podra acelerar y frenar, hay que tener en cuenta
que si implementamos IMovil tendremos que implementar
absolutamente todos sus métodos.
movil.Acelerar(30);
try{
movil.Acelerar(30);
catch(InvalidCastException e){
//gestión del error
IMovil movil;
if (movil != null)
movil.Frenar(10);
else
//otro tratamiento
if (coche1 is IMovil)
coche1.Acelerar(10);
else
//otra gestión
bool Acelerar(int n)
//Implementación de Acelerar
bool Frenar(int n)
//Implementación de frenar
//Implementación de GirarDerecha
//Implementación de GirarIzquierda
}
giro.GirarIzquierda(360);
//resto de metodods
miCampeon.Turbo(true);
iav.Turbo(true);
[editar]Jerarquías de interfaces
Las interfaces pueden servir de base para otras interfaces al igual que
las clases, e igual que en éstas la idea es que vayamos de lo general a
lo particular.
Por ejemplo:
interface IVehiculo
void Acelerar();
void Frenar();
void IVehiculo.Acelerar(int n)
void IVehiculo.Frenar(int n)
void IVehiculo.Acelerar(int n)
void IVehiculo.Frenar(int n)
{
//Gestión de la inyeccion
void IVehiculo.Acelerar(int n)
void IVehiculo.Frenar(int n)
//Gestión de la inyeccion
{
//Gestión de 4x4
((IVehiculo4x4)miTodoTerreno).Acelerar(20);
((IVehiculo4x4)miTodoTerreno).Frenar(20);
((IVehiculo4x4)miTodoTerreno).CambiarVelocidadInyeccion(1000);
((IVehiculo4x4)miTodoTerreno).Activar4x4(true);
SEPTIMO TUTORIAL