Está en la página 1de 49

Programacin con C#

Tema 4: El lenguaje C#

ndice

Introduccin Estructura de los programas Tipos de datos


Sistema comn de tipos Identificadores Variables y Constantes Tipos definidos por el usuario: enumeraciones y estructuras Arrays Cadenas de caracteres

Operadores y expresiones Estructuras de control


Condicionales De repeticin Excepciones Funciones y mtodos

C#

Introduccin

C# es el ltimo en una lnea de evolucin de los lenguajes derivados de C, que incluye C++ y Java. Usado por Microsoft para desarrollar la mayora del cdigo de .NET. Por tanto, es el lenguaje ideal para el desarrollo en .NET C# introduce varias mejoras sobre C++ en las reas de seguridad de datos, versionamiento, eventos y recoleccin de basura. C# provee acceso al SO, COM y APIs y soporta el modo unsafe que permite el uso de punteros como en C. Ms simple que C++ pero tan poderoso y flexible como l.

C#

Estructura de los programas


Un programa en C# contiene:

Uno o ms ficheros que contienen:

Uno o ms espacios de nombres que contienen:

Tipos de datos: clases, estructuras, interfaces, enumeraciones y delegados

Si no se declara un namespace se asume el global por defecto Un ejecutable ha de contener obligatoriamente una funcin Main (punto de entrada al programa)
static static static static void Main() int Main() void Main(string[] args) int Main(string[] args)

Para acceder a un tipo podemos usar un camino absoluto:


System.Console.WriteLine(...);

o relativo:
using System; ...; Console.WriteLine(...);

C#

Ejemplo:
namespace N1 {
class C1 { // ... } struct S1 { // ... } interface I1 { // ... } delegate int D1(); enum E1 { // ... } }

Comentarios de una lnea: // Comentarios de varias lneas: /*

.... */

C#

Tipos de datos

Sistema comn de tipos CTS sistema comn de tipos compartido por todos los lenguajes .NET

El CTS admite tanto tipos de valor como tipos de referencia

Tipos Tipos de de datos datos Tipos Tipos de de valor valor


- Intrnsecos, - Enumeraciones, - Estructuras

Tipos Tipos de de referencia referencia


- Autodescriptivos: clases y arrays - Interfaces - Punteros

Todos los tipos de datos en C# derivan de System.Object sistema de tipos unificado. Cualquier tipo puede ser tratado como un objeto.

C#

Tipos de datos bsicos


Tipo SByte Byte Int16 UInt16 Int32 UInt32 Int64 UInt64 Single Double Decimal Boolean Char String Object Descripcin Bytes con signo Bytes sin signo Enteros cortos con signo Enteros cortos sin signo Enteros normales Enteros normales sin signo Enteros largos Enteros largos sin signo Reales con 7 dgitos de precisin Reales de 15-16 dgitos de precisin Reales de 28-29 dgitos de precisin Valores lgicos Caracteres Unicode Cadenas de caracteres Cualquier objeto Bits 8 8 16 16 32 32 64 64 32 64 128 32 16 Variable Variable Rango de valores [-128, 127] [ 0 , 255] [-32.768, 32.767] [0, 65.535] [-2.147.483.648, 2.147.483.647] [0, 4.294.967.295] [-9.223.372.036.854.775.808, 9.223.372.036.854.775.807] [0-18.446.744.073.709.551.615] [1,510-45 - 3,41038] [5,010-324 - 1,710308] [1,010-28 - 7,91028] true, false [\u0000, \uFFFF] El permitido por la memoria Cualquier objeto Alias sbyte byte short ushort int uint long ulong float double decimal bool char string object

C#

Tipos de datos (cont)


Identificadores
Se usan para dar nombres a los elementos de un programa como variables, constantes y mtodos. Consta de caracteres alfanumricos y _ Sensible a maysculas y minsculas. Comenzar con letra o _ Palabras reservadas:

Si se quiere usar un identificador que es una palabra reservada hay que usar como prefijo el carcter @:
Object @this; // @ previene el conflicto con "this"

C#

Tipos de datos (cont)


Variables
Una Es

variable en C# representa la localizacin en memoria donde una instancia de un tipo es guardada simplemente una capa encima del sistema de tipos independiente del lenguaje de .NET (CTS) la distincin entre tipos de valor y tipos de referencia

Recordar

Tipos de valor son tipos simples como int, long y char Los objetos, strings y arrays son ejemplos de tipos de referencia

Los

tipos de valor se derivan de System.ValueType

C#

Tipos de datos (cont)


Comparacin

entre variables tipo valor y tipo referencia: Variables Variables de de tipo tipo referencia: referencia:

Variables Variables de de tipo tipo valor: valor:


Contienen Contienen sus sus datos datos directamente directamente Cada Cada una una tiene tiene su su propia propia copia copia de de datos datos Las Las operaciones operaciones sobre sobre una una no no afectan afectan a a otra otra

Almacenan Almacenan referencias referencias a a sus sus datos datos (conocidos (conocidos como como objetos) objetos) Dos Dos variables variables de de referencia referencia pueden pueden apuntar apuntar al al mismo mismo objeto objeto Las Las operaciones operaciones sobre sobre una una pueden pueden afectar afectar a a otra otra

C#

Tipos de datos (cont)


Las variables de valor pueden iniciarse al declararse:


bool bln = true; byte byt1 = 22; char ch1=x, ch2=\u0061; // decimal dec1 = 1.23M; double dbl1=1.23, dbl2=1.23D; short sh = 22; int i = 22; long lng1 =22, lng2 =22L; // sbyte sb = 22; float f=1.23F; ushort us1=22; uint ui1=22, ui2=22U; // ulong ul1 =22, ul2=22U, ul3=22L, Unicode para a

L long

U unsigned ul4=2UL;

C#

Tipos de datos (cont)


Los valores de referencia son creados con la palabra clave new:


object o = new System.Object();

Una variable String se puede inicializar directamente:


string s = "Hola"; // usan caracteres Unicode de 2 cars

C# soporta secuencias de escape como en C:


string s1 = "Hola\n"; // salto de lnea string s2 = "Hola\tque\ttal"; // tabulador

Como las sentencias de escape comienzan con \, para escribir este carcter hay que doblarlo, o usar @:
string s3 = "c:\\WINNT"; string s4 = @"C:\WINNT";

C#

Tipos de datos (cont)


mbito: conjunto de cdigo donde una variable es visible. La visibilidad de una variable fuera de su mbito se puede modificar anteponiendo public o private en la declaracin.
using System; namespace ConsoleAppVisibilitat { class Simple { public int Var1=10; private int Var2=20; //local public int Var3=30; } class Class1 { [STAThread] static void Main(string[] args) { Simple s = new Simple(); Console.WriteLine("Simple:"); Console.WriteLine("Var1={0}, Var3={1}",s.Var1, s.Var3); Console.ReadLine(); } } }

C#

Tipos de datos (cont)


static: Variable esttica, existe durante toda la ejecucin del programa. Slo existe una sola copia de la misma sin necesidad de crear objeto alguno. Hay que referirse a ella usando el nombre completo del tipo al que pertenece. No afecta a su visibilidad
} } } using System; namespace ConsoleAppVisibilitatSTAT { class Simple { public static int Var3=30; //pblica i esttica static int Var4=40; //privada i esttica public void mostraVar4() { Console.WriteLine("Var4={0}", ++Var4); } } class Class1 { [STAThread] static void Main(string[] args) { Simple s = new Simple(); Simple k = new Simple(); Console.WriteLine("Simple:"); Console.WriteLine("Var3={0}",Simple.Var3++); Console.WriteLine("Var3={0}",Simple.Var3); s.mostraVar4(); k.mostraVar4(); Console.ReadLine();

C#

Tipos de datos (cont)


Constantes
El modificador const permite crear constantes de programas:
Class Class1 { private const int min = 1; private const int max = 100; public const int rango = max min;

static void Main() {


Console.WriteLine(Class1.max,Class1.min,Class1.rango); // tambin Console.WriteLine(max, min, rango);

} }

C#

Tipos de datos

Tipos definidos por el usuario: Enumeraciones


Definicin

de una enumeracin:

enum Color { Rojo, Verde, Azul }

Uso

de una enumeracin: o

Color colorPaleta = Color.Rojo; colorPaleta = (Color)0; // Tipo int a Color

Visualizacin

de una variable de enumeracin: C#

Console.WriteLine({0}, colorPaletta); // Muestra Rojo

Tipos de datos (cont)


Tipos definidos por el usuario: Estructuras Definicin:


struct Empleado { public string nombre; public int edad; }

Uso:
Empleado empresaEmpleado, otroEmpleado; empresaEmpleado.Nombre = "Juan"; empresaEmpleado.edad = 23; otroEmpleado = empresaEmpleado; //asignacin directa

Comparacin: mtodo Equals(), no usar operador ==

C#

Tipos de datos (cont)


Conversin entre tipos de datos


Conversin Conversin implcita implcita Ocurre Ocurre de de forma forma automtica automtica Siempre Siempre tiene tiene xito xito Nunca Nunca se se pierde pierde informacin informacin en en la la conversin conversin Conversin Conversin explcita explcita Requiere Requiere la la realizacin realizacin del del cast cast Puede Puede no no tener tener xito xito Puede Puede perderse perderse informacin informacin en en la la conversin conversin

int intValor = 123; long longValor = intValor; // implcita de int a long intvalor = (int) longValor; // explcita de long a int con cast int x = 123456; long y = x; short z = (short)x; double d = 1.2345678901234; float f = (float)d; long l = (long)d; // implcita // explcita // explcita // explcita

C#

Operadores y expresiones

Operadores aritmticos:

Operadores relacionales:

+, Suma unaria , +a -, Resta unaria, -a ++, Incremento, ++a o a++ --, Decremento, --a o a-+, Suma, a+b -, Resta, a-b *, Multiplicacin, a*b /, Divisin, a/b %, Resto, a%b

Operadores de manipulacin de bits:


int i1=32; int i2=i1<<2; // i2==128 int i3=i1>>3; // i3==4

==, Igualdad , a==b !=, Inigualdad, a!=b <, Menor que, a<b <=, Menor o igual, a<=b >, Mayor que, a>b >=, Mayor que o Igual a, a>=b !, Negacin , !a &, And binario, a&b |, Or binario, a|b ^, Or exclusivo, a^b ~, Negacin binaria, ~a &&, And lgico, a&&b ||, Or lgico, a||b

C#

Operadores y expresiones (cont)


Otros operadores

min=a<b ? a:b; // equivale a: 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

Las expresiones en C# son similares a C y C++ C#

Operadores y expresiones (cont)


Precedencia
+ Opera dores () * / % + < <= > >= == != = Asocia tivida d Izquierda a derecha Izquierda a derecha Izquierda a derecha Izquierda a derecha Izquierda a derecha Derecha a izquierda Tipo Parntesis Multiplicativos Adicin Relacionales Igualdad Asignacin

Asociatividad
Todos Los

los operadores binarios, salvo los de asignacin, son asociativos por la izquierda operadores de asignacin y el operador condicional(?) son asociativos por la derecha

C#

Tipos de datos (cont)


Arrays

Los arrays son tipos por referencia Sus ndices comienzan en 0 Derivados de System.Array ejemplo: string[] a; El tipo de datos viene dado por string[], el nombre del array es una referencia al array Para crear espacio para los elementos usar:
string[] a = new string[100];

Los arrays se pueden inicializar directamente:


string[] animales = {"gato", "perro", "caballo"}; int[] a2 = {1, 2, 3};

Puede haber arrays multidimensionales :


string[,] ar = {{"perro","conejo"}, {"gato","caballo"}};

C#

Tipos de datos (cont)


El rango de los elementos del array es dinmico:


Si se crea un nuevo array sobre el mismo se libera la memoria que ocupaba y se pierde toda la informacin que contenia. Dimensiones: Rank Nmero de elementos: GetLength() ndice superior e inferior: GetLowerBound(d); GetUpperBound(d) (d=dimensin, desde 0 hasta Rank-1) Saber si es un array: if (a is Array) .... Console.WriteLine(a);

Informacin sobre un array:


Recorrido de los elementos de un array sin conocer sus ndices


foreach (string a in animales)

Otras operaciones: Clone(); Copy(); Sort();

C#

Tipos de datos (cont)


Caracteres y cadenas

Dos tipos para manipular caracteres: char y string char puede contener cualquier carcter Unicode (16 bits) Manipulacion de caracteres: IsDigit(); IsLetter(); IsPunctuation(); ToUpper(); ToLower(), ToString();... Una variable tipo string es una referencia al lugar donde se guarda la cadena. Cada vez que se modifica el valor de la cadena se asigna un nuevo bloque de memoria y se libera el anterior. Concatenacin: operador + (no existe en C ,C++) o usar Concat(): string a, b; a="Programacin "; b="con C#"; Console.WriteLine(Usando +: {0}", a+b); Console.WriteLine(" Usando concat: {0}", string.Concat(a, b));

C#

Estructuras de control

Instrucciones

Pueden ocupar ms de una lnea y deben terminarse con un ;


int i, j; i=1;

Un bloque y su bloque padre o pueden tener una variable con el mismo nombre
{ int i; ... { int i; ... }

Grupos de instrucciones se pueden agrupar en bloques con { y }


{ j=2; i=i+j; }

Bloques hermanos pueden tener variables con el mismo nombre


{ } { }
...

int i; ... int i; ...

C#

Estructuras de control (cont)


Condicionales
if (<condicin>) <sentenciasCondTrue> if (<condicin>) { <sentenciasCondTrue> [else { <sentenciasCondFalse> }]

Ejemplo:
if (a>b) Mayor=a; if (a>b) { Mayor=a; Menor=b; } else { Mayor=b; Menor=a; }

C#

Estructuras de control (cont)


Ejemplo if en cascada
enum Palo { Treboles, Corazones, Diamantes, Picas} Palo cartas = Palo.Corazones; string color; if (cartas == Palo.Treboles) color = Negro; else if (cartas == Palo.Corazones) color = Rojo"; else if (palo == Palo.Diamantes) color = "Rojo"; else color = Negro";

C#

Estructuras de control (cont)


Condicionales mltiples
switch (<expressin>) { case Opc1 : [<sentencias-1>] break; [case Opc2 : [<sentencias-2>] break; default: <sentencias-def> break;] }

Ejemplo:
switch(B) { case 5: Console.WriteLine(B es ptimo); A=10; break; case 1: case 2: case 3: case 4: Console.WriteLine(B est por debajo del valor ptimo); A=3; break; default: Console.WriteLine(B no es vlido); break; }

C#

Estructuras de control (cont)


De repeticin
for

for (int i=0; i < 5; i++) { // i declarada dentro del bucle Console.WriteLine(i); } for (;;) { ... // bucle infinito } for (int i=1, j=2; i<=5; i++, j+=2) { //mltiples expresiones System.Console.WriteLine("i=" + i + ", j=" + j); }

C#

Estructuras de control (cont)


while

Ejecuta instrucciones en funcin de un valor booleano Evala la expresin booleana al principio del bucle

while while (true) (true) { { ... ... } }

int int i i= = 0; 0; while while (i (i < < 10) 10) { { Console.WriteLine(i ); Console.WriteLine(i ); i++; i++; 0 1 2 3 4 5 6 7 8 9 } }

int int i i= = 10; 10; while while (i (i > > 5) 5) { { ... ... i--; i--; } }

C#

Estructuras de control (cont)


do

Ejecuta instrucciones en funcin de un valor booleano Evala la expresin booleana al final del bucle

do do { { ... ... } } while while (true); (true);

int int i i= = 0; 0; do do { { Console.WriteLine(i); Console.WriteLine(i); i++; i++; 0 1 2 3 4 5 6 7 8 9 10 } } while while (i (i <= <= 10); 10);

int int i i= = 10; 10; do do { { ... ... i--; i--; } } while while (i (i > > 5); 5);

C#

Estructuras de control (cont)


Instrucciones de salto

continue: Salta el resto de la iteracin y comienza la siguiente


for (int i=1; i<=5; i++) { if (i==3) continue; Console.WriteLine(i); } for (int i=1; i<=5; i++) { if (i==3) break; Console.WriteLine(i); }

break : Permite salir de un bucle:

foreach: ejecuta instrucciones para cada elemento de una coleccin


public static void Main(string[] args) { foreach (string s in args) Console.WriteLine(s); //muestra las cadenas de args una a una }

return [<expresin>]: Sale del mtodo actual throw : lanza una excepcin

C#

Estructuras de control (cont)


Excepciones

Las excepciones son el mecanismo de C# para controlar las situaciones de error. por qu usar excepciones? El tradicional tratamiento procedural de errores es demasiado complicado:
Lgica Lgicadel delprograma programa

int int errorCodigo errorCodigo = = 0; 0; FileInfo FileInfo source source = = new new FileInfo("code.cs"); FileInfo("code.cs"); if if (errorCodigo (errorCodigo == == -1) -1) goto goto Fallo; Fallo; int int longitud longitud = = (int)source.Length; (int)source.Length; if if (errorCodigo (errorCodigo == == -2) -2) goto goto Fallo; Fallo; char[] char[] contenido contenido = = new new char[longitud]; char[longitud]; if if (errorCodigo (errorCodigo == == -3) -3) goto goto Fallo; Fallo; // // No No hay hay problemas problemas ... ... Trat. Fallo: Trat.De Deerrores errores Fallo: ... ...

C#

Estructuras de control (cont)


Todas las excepciones derivan de System.Exception

Exception Exception SystemException SystemException OutOfMemoryException OutOfMemoryException IOException IOException NullReferenceException NullReferenceException ApplicationException ApplicationException

C#

Estructuras de control (cont)


Tratamiento de excepciones orientado a objetos :


try { ... } catch { ... }[ finally { ... }] // bloque que controla la excepcin // bloque de finalizacin que siempre se ejecuta // bloque normal de cdigo

Ejemplo:
try { Console.WriteLine("Escriba un nmero"); int i = int.Parse(Console.ReadLine()); } catch (OverflowException capturada) { Console.WriteLine(capturada); }

C#

Estructuras de control (cont)


Cada bloque catch captura una clase de excepcin Un bloque try puede tener un bloque catch general que capture excepciones no tratadas (uno solo y el ltimo de los bloques catch) Un bloque try no puede capturar una excepcin derivada de una clase capturada en un bloque catch anterior
try { Console.WriteLine(Escriba el primer nmero"); int i = int.Parse(Console.ReadLine()); Console.WriteLine("Escriba el segundo nmero"); int j = int.Parse(Console.ReadLine()); int k = i / j; } catch (OverflowException capturada) { Console.WriteLine(capturada); } catch (DivideByZeroException capturada) {Console.WriteLine(capturada); } catch {} // tambin: catch (Exception x) { } ...

C#

Estructuras de control (cont)


Funciones y mtodos

En C# todo son funciones, no existen procedimientos. Todas las funciones siempre pertenecen a una clase, luego son todas las funciones son mtodos. Los mtodos, por defecto, son privados (private) Main es un mtodo y para definir mtodos propios se usa la misma sintaxis:
using System; class EjemploClase { static void EjemploMetodo( ) { Console.WriteLine("Este es un ejemplo de mtodo"); } static void Main( ) { // ... } }

C#

Estructuras de control (cont)


Una

vez definido un mtodo, se puede:

Llamar a un mtodo desde dentro de la misma clase


Se usa el nombre del mtodo seguido de una lista de parmetros entre parntesis

Llamar a un mtodo que est en una clase diferente


Hay que indicar al compilador cul es la clase que contiene el mtodo que se desea llamar El mtodo llamado se debe declarar con la palabra clave public

Usar llamadas anidadas


Unos mtodos pueden hacer llamadas a otros, que a su vez pueden llamar a otros mtodos, y as sucesivamente.

C#

Estructuras de control (cont)


Variables locales

Se crean cuando comienza el mtodo Son privadas para el mtodo Se destruyen a la salida

Variables

compartidas de mbito

Para compartir se utilizan variables de clase

Conflictos

El compilador no avisa si hay conflictos entre nombres locales y de clase.

C#

Estructuras de control (cont)


Devolucin de valores

El mtodo se debe declarar con un tipo que no sea void Se aade una instruccin return con una expresin

Fija el valor de retorno Se devuelve al llamador

Los mtodos que no son void deben devolver un valor ) ) { {

static static int int DosMasDos( DosMasDos( int int a,b; a,b; a a = = 2; 2; b b = = 2; 2; return return a a + + b; b; } }

int int x; x; x x = = DosMasDos( DosMasDos( ); ); Console.WriteLine(x); Console.WriteLine(x);

C#

Estructuras de control (cont)


Parmetros

Declaracin de parmetros

Se ponen entre parntesis despus del nombre del mtodo Se definen el tipo y el nombre de cada parmetro

Llamadas a mtodos con parmetros


Un valor para cada parmetro

Paso por valor, por referencia y parmetros de salida

static static void void MetodoConParametros(int MetodoConParametros(int n, n, string string y) y) { { ... ... } } MetodoConParametros(2, MetodoConParametros(2, "Hola, "Hola, mundo"); mundo");

C#

Estructuras de control (cont)


Paso por valor


Se copia el valor del parmetro Se puede cambiar el nombre de la variable dentro del mtodo No afecta al valor fuera del mtodo El parmetro debe ser de un tipo igual o compatible

static static void void SumaUno(int SumaUno(int x) x) { { x++; x++; // // Incrementar Incrementar x x } } static static void void Main( Main( ) ) { { int int k k= = 6; 6; SumaUno(k); SumaUno(k); Console.WriteLine(k); Console.WriteLine(k); // // Muestra Muestra el el valor valor 6, 6, no no 7 7

C#

Estructuras de control (cont)


Paso por referencia


Se pasa una referencia a una posicin de memoria Se usa la palabra clave ref en la declaracin y las llamadas al mtodo Los tipos y valores de variables deben coincidir Los cambios hechos en el mtodo afectan al llamador Hay que asignar un valor al parmetro antes de la llamada al mtodo

static static int int RaizCuarta(ref RaizCuarta(ref int int x) x) { { x x= = (int)Math.Sqrt(x); (int)Math.Sqrt(x); return return (int)Math.Sqrt(x); (int)Math.Sqrt(x); } } static static void void Main( Main( ) ){ { int num = 625; int num = 625; //siempre //siempreinicializar!! inicializar!! Console.WriteLine(Raiz Console.WriteLine(Raiz cuarta: cuarta: {0}, {0}, el el nmero nmero original original es: es: {1}, {1}, RaizCuarta(ref RaizCuarta(ref num), num), num); num); } }

C#

Estructuras de control (cont)


Parmetros de salida
Pasan valores hacia fuera, pero no hacia dentro No se pasan valores al mtodo Se usa la palabra clave out en la declaracin y las llamadas al mtodo

static static void void OutDemo(out OutDemo(out int int p) p) { { // // ... ... } } static static void void Main( Main( ) ){ { int int n; n; OutDemo(out OutDemo(out n); n); }}

C#

Estructuras de control (cont)


Lista de parmetros de longitud variable


Se usa la palabra clave params Se declara como array al final de la lista de parmetros Siempre paso por valor

static static long long SumaLista(params SumaLista(params long[ long[ ] ] v) v) { { long long total, total, i; i; for for (i (i = = 0, 0, total total = = 0; 0; i i< < v.Length; v.Length; i++) i++) total total += += v[i]; v[i]; return return total; total; } } static static void void Main( Main( ) ) { { long long x x= = SumaLista(63,21,84); SumaLista(63,21,84); } }

C#

Estructuras de control (cont)


Normas para el paso de parmetros:


El paso por valor es el ms habitual y suele ser el ms eficaz El valor de retorno del mtodo es til para un solo valor ref y/o out son tiles para ms de un valor de retorno ref slo se usa si los datos se pasan en ambos sentidos

Devolucin

de arrays desde mtodos

class class EjemploArr1 EjemploArr1 { { static static void void Main( Main( ) ){ { int[ ] array = CreateArray(42); int[ ] array = CreateArray(42); ... ... } } static static int[ int[ ] ] CreateArray(int CreateArray(int tamano) tamano) { { int[ int[ ] ] creada creada = = new new int[tamano]; int[tamano]; return return creada; creada; } } } }

C#

Estructuras de control (cont)


Paso

de arrays como parmetros

Un parmetro de array es una copia de la variable de array No es una copia del array

class class EjemploArr2 EjemploArr2 { { static static void void Main( Main( ) ) { { int[ int[ ] ] arg arg = = {10, {10, 9, 9, 8, 8, 7}; 7}; Method(arg); Method(arg); System.Console.WriteLine(arg[0]); System.Console.WriteLine(arg[0]); } } static static void void Metodo(int[ Metodo(int[ ] ] parametro) parametro) { { parametro[0]++; parametro[0]++; Este Este mtodo mtodo modificar modificar } }
el el array array original original creado creado en en Main Main

} }

C#

Estructuras de control (cont)


Mtodos

recursivos

Hacen llamadas a s mismos til para resolver ciertos problemas

static static ulong ulong Fibonacci(ulong Fibonacci(ulong n) n) { { if if (n (n <= <= 2) 2) return return 1; 1; else else return return Fibonacci(n-1) Fibonacci(n-1) + + Fibonacci(n-2); Fibonacci(n-2); } }

C#

Estructuras de control (cont)


Mtodos

sobrecargados (overloading)

Comparten un nombre en una clase. Se distinguen examinando la lista de parmetros. Usarlos cuando hay mtodos similares que requieren parmetros diferentes o si se quiere aadir funcionalidad al cdigo existente. No abusar pues son difciles de mantener y de depurar.
class class OverloadingExample OverloadingExample {{ static static int int Suma(int Suma(int a, a, int int b) b) {{ return return aa ++ b; b; }} static static int int Suma(int Suma(int a, a, int int b, b, int int c) c) {{ return return aa ++ bb ++ c; c; }} static static void void Main( Main( )) {{ Console.WriteLine(Suma(1,2) Console.WriteLine(Suma(1,2) ++ Suma(1,2,3)); Suma(1,2,3)); }} }}

C#

También podría gustarte