SlideShare a Scribd company logo
1 of 49
Download to read offline
ProgramaciProgramacióónn con C#con C#
Tema : El lenguaje C#
C#
ÍÍndicendice
Introducción
Estructura de los programas
Tipos de datos
Sistema común 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 repetición
Excepciones
Funciones y métodos
C#
C#C#
IntroducciIntroduccióónn
C# es el último en una línea de evolución de los lenguajes
derivados de C, que incluye C++ y Java.
Usado por Microsoft para desarrollar la mayoría del código
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 recolección
de basura.
C# provee acceso al SO, COM y APIs y soporta el modo
unsafe que permite el uso de punteros como en C.
Más simple que C++ pero tan poderoso y flexible como él.
C#C#
Estructura de losEstructura de los programasprogramas
Un programa en C# contiene:
Uno o más ficheros que contienen:
Uno o más 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 función Main
(punto de entrada al programa)
static void Main()
static int Main()
static void Main(string[] args)
static int Main(string[] args)
Para acceder a un tipo podemos usar un camino absoluto:
System.Console.WriteLine(...);
o relativo:
using System; ...;
Console.WriteLine(...);
C#C#
EjemploEjemplo::
namespace N1 {
class C1 {
// ...
}
struct S1 {
// ...
}
interface I1 {
// ...
}
delegate int D1();
enum E1 {
// ...
}
}
Comentarios de una línea: //
Comentarios de varias líneas: /*
.... */
C#C#
Sistema común de tipos
CTS sistema común de tipos compartido por todos los lenguajes .NET
El CTS admite tanto tipos de valor como tipos de referencia
Todos los tipos de datos en C# derivan de System.Object sistema de
tipos unificado.
Cualquier tipo puede ser tratado como un objeto.
TiposTipos dede datosdatos
Tipos de referenciaTipos de referencia
Tipos de datosTipos de datos
Tipos de valorTipos de valor
- Intrínsecos,
- Enumeraciones,
- Estructuras
- Autodescriptivos: clases y arrays
- Interfaces
- Punteros
C#C#
objectCualquier objetoVariableCualquier objetoObject
stringEl permitido por la memoriaVariableCadenas de caracteresString
char[‘u0000’, ‘uFFFF’]16Caracteres UnicodeChar
booltrue, false32Valores lógicosBoolean
decimal[1,0×10-28 - 7,9×1028]128Reales de 28-29 dígitos de precisiónDecimal
double[5,0×10-324 - 1,7×10308]64Reales de 15-16 dígitos de precisiónDouble
float[1,5×10-45 - 3,4×1038]32Reales con 7 dígitos de precisiónSingle
ulong[0-18.446.744.073.709.551.615]64Enteros largos sin signoUInt64
long
[-9.223.372.036.854.775.808,
9.223.372.036.854.775.807]
64Enteros largos
Int64
uint[0, 4.294.967.295]32Enteros normales sin signoUInt32
int[-2.147.483.648, 2.147.483.647]32Enteros normalesInt32
ushort[0, 65.535]16Enteros cortos sin signoUInt16
short[-32.768, 32.767]16Enteros cortos con signoInt16
byte[ 0 , 255]8Bytes sin signoByte
sbyte[-128, 127]8Bytes con signoSByte
AliasRango de valoresBitsDescripciónTipo
TiposTipos dede datosdatos bbáásicossicos
C#C#
Identificadores
Se usan para dar nombres a los elementos de un programa
como variables, constantes y métodos.
Consta de caracteres alfanuméricos y _
Sensible a mayúsculas y minúsculas. Comenzar con letra o _
Palabras reservadas:
Si se quiere usar un identificador que es una palabra reservada
hay que usar como prefijo el carácter ‘@’:
Object @this; // @ previene el conflicto con "this"
TiposTipos dede datosdatos ((contcont))
C#C#
Variables
Una variable en C# representa la localización en
memoria donde una instancia de un tipo es guardada
Es simplemente una capa encima del sistema de tipos
independiente del lenguaje de .NET (CTS)
Recordar la distinción entre tipos de valor y tipos de
referencia
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
TiposTipos dede datosdatos ((contcont))
C#C#
Comparación entre variables tipo valor y tipo referencia:
Variables de tipo valor:
Contienen sus datos
directamente
Cada una tiene su
propia copia de datos
Las operaciones
sobre una no afectan
a otra
Variables de tipo valor:
Contienen sus datos
directamente
Cada una tiene su
propia copia de datos
Las operaciones
sobre una no afectan
a otra
Variables de tipo referencia:
Almacenan referencias a
sus datos (conocidos
como objetos)
Dos variables de
referencia pueden
apuntar al mismo objeto
Las operaciones sobre
una pueden afectar a
otra
Variables de tipo referencia:
Almacenan referencias a
sus datos (conocidos
como objetos)
Dos variables de
referencia pueden
apuntar al mismo objeto
Las operaciones sobre
una pueden afectar a
otra
TiposTipos dede datosdatos ((contcont))
C#C#
Las variables de valor pueden iniciarse al declararse:
bool bln = true;
byte byt1 = 22;
char ch1=‘x’, ch2=‘u0061’; // Unicode para ‘a’
decimal dec1 = 1.23M;
double dbl1=1.23, dbl2=1.23D;
short sh = 22;
int i = 22;
long lng1 =22, lng2 =22L; // ‘L’ long
sbyte sb = 22;
float f=1.23F;
ushort us1=22;
uint ui1=22, ui2=22U; // ‘U’ unsigned
ulong ul1 =22, ul2=22U, ul3=22L, ul4=2UL;
TiposTipos dede datosdatos ((contcont))
C#C#
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 = "Holan"; // salto de línea
string s2 = "Holatquettal"; // tabulador
Como las sentencias de escape comienzan con ‘’, para
escribir este carácter hay que doblarlo, o usar ‘@’:
string s3 = "c:WINNT";
string s4 = @"C:WINNT";
TiposTipos dede datosdatos ((contcont))
C#C#
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();
}
}
}
TiposTipos dede datosdatos ((contcont))
Ámbito: conjunto de
código donde una variable
es visible.
La visibilidad de una
variable fuera de su ámbito
se puede modificar
anteponiendo public o
private en la declaración.
C#C#
using System;
namespace ConsoleAppVisibilitatSTAT {
class Simple {
public static int Var3=30; //pública i
estàtica
static int Var4=40; //privada i estàtica
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();
}
}
}
TiposTipos dede datosdatos ((contcont))
static: Variable estática,
existe durante toda la
ejecución del programa.
Sólo 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
C#C#
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);
// también Console.WriteLine(max, min, rango);
}
}
TiposTipos dede datosdatos ((contcont))
C#C#
Tipos definidos por el usuario: Enumeraciones
TiposTipos dede datosdatos
Definición de una enumeración:
enum Color { Rojo, Verde, Azul }
Uso de una enumeración:
Color colorPaleta = Color.Rojo;
o
colorPaleta = (Color)0; // Tipo int a Color
Visualización de una variable de enumeración:
Console.WriteLine(“{0}”, colorPaletta);
// Muestra Rojo
C#C#
Tipos definidos por el usuario: Estructuras
Definición:
struct Empleado {
public string nombre;
public int edad;
}
Uso:
Empleado empresaEmpleado, otroEmpleado;
empresaEmpleado.Nombre = "Juan";
empresaEmpleado.edad = 23;
otroEmpleado = empresaEmpleado; //asignación directa
Comparación: método Equals(), no usar operador ==
TiposTipos dede datosdatos ((contcont))
C#C#
Conversión entre tipos de datos
int intValor = 123;
long longValor = intValor; // implícita de int a long
intvalor = (int) longValor; // explícita de long a int con cast
int x = 123456;
long y = x; // implícita
short z = (short)x; // explícita
double d = 1.2345678901234;
float f = (float)d; // explícita
long l = (long)d; // explícita
TiposTipos dede datosdatos ((contcont))
Conversión implícita
Ocurre de forma automática
Siempre tiene éxito
Nunca se pierde información
en la conversión
Conversión implícita
Ocurre de forma automática
Siempre tiene éxito
Nunca se pierde información
en la conversión
Conversión explícita
Requiere la realización del cast
Puede no tener éxito
Puede perderse información en la
conversión
Conversión explícita
Requiere la realización del cast
Puede no tener éxito
Puede perderse información en la
conversión
C#C#
Operadores yOperadores y expresionesexpresiones
Operadores aritméticos:
+, Suma unaria , +a
-, Resta unaria, -a
++, Incremento, ++a o a++
--, Decremento, --a o a--
+, Suma, a+b
-, Resta, a-b
*, Multiplicación, a*b
/, División, a/b
%, Resto, a%b
Operadores relacionales:
==, 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
!, Negación , !a
&, And binario, a&b
|, Or binario, a|b
^, Or exclusivo, a^b
~, Negación binaria, ~a
&&, And lógico, a&&b
||, Or lógico, a||b
Operadores de manipulación
de bits:
int i1=32;
int i2=i1<<2; // i2==128
int i3=i1>>3; // i3==4
C#C#
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 conversión 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 tamaño de un tipo en bytes
* para obtener la variable a la que apunta un puntero
->, p->m es lo mismo que (*).m
& devuelve la dirección de un operando
Las expresiones en C# son similares a C y C++
Operadores yOperadores y expresionesexpresiones ((contcont))
C#C#
Operadores yOperadores y expresionesexpresiones ((contcont))
Precedencia
Asociatividad
Todos los operadores binarios, salvo los de asignación,
son asociativos por la izquierda
Los operadores de asignación y el operador condicional(?)
son asociativos por la derecha
+ Operadores Asociatividad Tipo
() Izquierda a derecha Paréntesis
* / % Izquierda a derecha Multiplicativos
+ - Izquierda a derecha Adición
< <= > >= Izquierda a derecha Relacionales
== != Izquierda a derecha Igualdad
- = Derecha a izquierda Asignación
C#C#
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"}};
TiposTipos dede datosdatos ((contcont))
C#C#
El rango de los elementos del array es dinámico:
Si se crea un nuevo array sobre el mismo se libera la memoria que
ocupaba y se pierde toda la información que contenia.
Información sobre un array:
Dimensiones: Rank
Número de elementos: GetLength()
Índice superior e inferior: GetLowerBound(d); GetUpperBound(d)
(d=dimensión, desde 0 hasta Rank-1)
Saber si es un array: if (a is Array) ....
Recorrido de los elementos de un array sin conocer sus índices
foreach (string a in animales) Console.WriteLine(a);
Otras operaciones: Clone(); Copy(); Sort();
TiposTipos dede datosdatos ((contcont))
C#C#
Caracteres y cadenas
Dos tipos para manipular caracteres: char y string
char puede contener cualquier carácter 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.
Concatenación: operador + (no existe en C ,C++) o usar Concat():
string a, b;
a="Programación ";
b="con C#";
Console.WriteLine(“Usando +: {0}", a+b);
Console.WriteLine(" Usando concat: {0}", string.Concat(a, b));
TiposTipos dede datosdatos ((contcont))
C#C#
EstructurasEstructuras de controlde control
Un bloque y su bloque padre o
pueden tener una variable con
el mismo nombre
{
int i;
...
{
int i;
...
}
}
Bloques hermanos pueden tener
variables con el mismo nombre
{
int i;
...
}
...
{
int i;
...
}
Instrucciones
Pueden ocupar más de una
línea y deben terminarse
con un ;
int i, j;
i=1;
Grupos de instrucciones se
pueden agrupar en bloques
con { y }
{
j=2;
i=i+j;
}
C#C#
EstructurasEstructuras de controlde control ((contcont))
Condicionales
if (<condición>)
<sentenciasCondTrue>
if (<condición>)
{
<sentenciasCondTrue>
[else
{
<sentenciasCondFalse>
} ]
Ejemplo:
if (a>b) Mayor=a;
if (a>b)
{
Mayor=a;
Menor=b;
}
else
{
Mayor=b;
Menor=a;
}
C#C#
EstructurasEstructuras de controlde control ((contcont))
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#C#
EstructurasEstructuras de controlde control ((contcont))
Condicionales múltiples
switch (<expressión>)
{
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 válido);
break;
}
C#C#
De repetición
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) { //múltiples expresiones
System.Console.WriteLine("i=" + i + ", j=" + j);
}
EstructurasEstructuras de controlde control ((contcont))
C#C#
while
Ejecuta instrucciones en función de un valor booleano
Evalúa la expresión booleana al principio del bucle
EstructurasEstructuras de controlde control ((contcont))
while (true) {
...
}
while (true) {
...
}
int i = 0;
while (i < 10) {
Console.WriteLine(i);
i++;
}
int i = 0;
while (i < 10) {
Console.WriteLine(i);
i++;
} 0 1 2 3 4 5 6 7 8 90 1 2 3 4 5 6 7 8 9
int i = 10;
while (i > 5) {
...
i--;
}
int i = 10;
while (i > 5) {
...
i--;
}
C#C#
do
Ejecuta instrucciones en función de un valor booleano
Evalúa la expresión booleana al final del bucle
EstructurasEstructuras de controlde control ((contcont))
int i = 0;
do {
Console.WriteLine(i);
i++;
} while (i <= 10);
int i = 0;
do {
Console.WriteLine(i);
i++;
} while (i <= 10);
0 1 2 3 4 5 6 7 8 9 100 1 2 3 4 5 6 7 8 9 10
int i = 10;
do {
...
i--;
}
while (i > 5);
int i = 10;
do {
...
i--;
}
while (i > 5);
do {
...
} while (true);
do {
...
} while (true);
C#C#
Instrucciones de salto
continue: Salta el resto de la iteración y comienza la siguiente
for (int i=1; i<=5; i++) {
if (i==3)
continue;
Console.WriteLine(i);
}
break : Permite salir de un bucle:
for (int i=1; i<=5; i++) {
if (i==3)
break;
Console.WriteLine(i);
}
foreach: ejecuta instrucciones para cada elemento de una colección
public static void Main(string[] args) {
foreach (string s in args)
Console.WriteLine(s); //muestra las cadenas de args una a una
}
return [<expresión>]: Sale del método actual
throw : lanza una excepción
EstructurasEstructuras de controlde control ((contcont))
C#C#
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:
EstructurasEstructuras de controlde control ((contcont))
int errorCodigo = 0;
FileInfo source = new FileInfo("code.cs");
if (errorCodigo == -1) goto Fallo;
int longitud = (int)source.Length;
if (errorCodigo == -2) goto Fallo;
char[] contenido = new char[longitud];
if (errorCodigo == -3) goto Fallo;
// No hay problemas ...
Fallo: ...
int errorCodigo = 0;
FileInfo source = new FileInfo("code.cs");
if (errorCodigo == -1) goto Fallo;
int longitud = (int)source.Length;
if (errorCodigo == -2) goto Fallo;
char[] contenido = new char[longitud];
if (errorCodigo == -3) goto Fallo;
// No hay problemas ...
Fallo: ...
Lógica del programaLógica del programa
Trat. De erroresTrat. De errores
C#C#
Todas las excepciones derivan de System.Exception
EstructurasEstructuras de controlde control ((contcont))
ExceptionException
SystemExceptionSystemException
OutOfMemoryExceptionOutOfMemoryException
IOExceptionIOException
NullReferenceExceptionNullReferenceException
ApplicationExceptionApplicationException
C#C#
Tratamiento de excepciones orientado a objetos :
try {
... // bloque normal de código
}
catch {
... // bloque que controla la excepción
}[ finally {
... // bloque de finalización que siempre se ejecuta
}]
Ejemplo:
try {
Console.WriteLine("Escriba un número");
int i = int.Parse(Console.ReadLine());
}
catch (OverflowException capturada)
{
Console.WriteLine(capturada);
}
EstructurasEstructuras de controlde control ((contcont))
C#C#
Cada bloque catch captura una clase de excepción
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 excepción derivada de una clase
capturada en un bloque catch anterior
…
try
{
Console.WriteLine(“Escriba el primer número");
int i = int.Parse(Console.ReadLine());
Console.WriteLine("Escriba el segundo número");
int j = int.Parse(Console.ReadLine());
int k = i / j;
}
catch (OverflowException capturada) {
Console.WriteLine(capturada); }
catch (DivideByZeroException capturada)
{Console.WriteLine(capturada); }
catch {…} // también: catch (Exception x) { … }
...
EstructurasEstructuras de controlde control ((contcont))
C#C#
Funciones y métodos
En C# todo son funciones, no existen procedimientos.
Todas las funciones siempre pertenecen a una clase, luego son todas
las funciones son métodos.
Los métodos, por defecto, son privados (private)
Main es un método y para definir métodos propios se usa la misma
sintaxis:
using System;
class EjemploClase
{
static void EjemploMetodo( )
{
Console.WriteLine("Este es un ejemplo de método");
}
static void Main( )
{
// ...
}
}
EstructurasEstructuras de controlde control ((contcont))
C#C#
Una vez definido un método, se puede:
Llamar a un método desde dentro de la misma clase
Se usa el nombre del método seguido de una lista de parámetros entre
paréntesis
Llamar a un método que está en una clase diferente
Hay que indicar al compilador cuál es la clase que contiene el método
que se desea llamar
El método llamado se debe declarar con la palabra clave public
Usar llamadas anidadas
Unos métodos pueden hacer llamadas a otros, que a su vez pueden
llamar a otros métodos, y así sucesivamente.
EstructurasEstructuras de controlde control ((contcont))
C#C#
Variables locales
Se crean cuando comienza el método
Son privadas para el método
Se destruyen a la salida
Variables compartidas
Para compartir se utilizan variables de clase
Conflictos de ámbito
El compilador no avisa si hay conflictos entre nombres locales
y de clase.
EstructurasEstructuras de controlde control ((contcont))
C#C#
Devolución de valores
El método se debe declarar con un tipo que no sea void
Se añade una instrucción return con una expresión
Fija el valor de retorno
Se devuelve al llamador
Los métodos que no son void deben devolver un valor
EstructurasEstructuras de controlde control ((contcont))
static int DosMasDos( ) {
int a,b;
a = 2;
b = 2;
return a + b;
}
static int DosMasDos( ) {
int a,b;
a = 2;
b = 2;
return a + b;
}
int x;
x = DosMasDos( );
Console.WriteLine(x);
int x;
x = DosMasDos( );
Console.WriteLine(x);
C#C#
EstructurasEstructuras de controlde control ((contcont))
Parámetros
Declaración de parámetros
Se ponen entre paréntesis después del nombre del método
Se definen el tipo y el nombre de cada parámetro
Llamadas a métodos con parámetros
Un valor para cada parámetro
Paso por valor, por referencia y parámetros de salida
static void MetodoConParametros(int n, string y)
{ ... }
MetodoConParametros(2, "Hola, mundo");
static void MetodoConParametros(int n, string y)
{ ... }
MetodoConParametros(2, "Hola, mundo");
C#C#
EstructurasEstructuras de controlde control ((contcont))
Paso por valor
Se copia el valor del parámetro
Se puede cambiar el nombre de la variable dentro del método
No afecta al valor fuera del método
El parámetro debe ser de un tipo igual o compatible
static void SumaUno(int x)
{
x++; // Incrementar x
}
static void Main( )
{
int k = 6;
SumaUno(k);
Console.WriteLine(k); // Muestra el valor 6, no 7
static void SumaUno(int x)
{
x++; // Incrementar x
}
static void Main( )
{
int k = 6;
SumaUno(k);
Console.WriteLine(k); // Muestra el valor 6, no 7
C#C#
EstructurasEstructuras de controlde control ((contcont))
Paso por referencia
Se pasa una referencia a una posición de memoria
Se usa la palabra clave ref en la declaración y las llamadas al
método
Los tipos y valores de variables deben coincidir
Los cambios hechos en el método afectan al llamador
Hay que asignar un valor al parámetro antes de la llamada al
método
static int RaizCuarta(ref int x)
{
x = (int)Math.Sqrt(x);
return (int)Math.Sqrt(x);
}
static void Main( ) {
int num = 625; //siempre inicializar!!
Console.WriteLine(“Raiz cuarta: {0}, el número
original es: {1}”, RaizCuarta(ref num), num);
}
static int RaizCuarta(ref int x)
{
x = (int)Math.Sqrt(x);
return (int)Math.Sqrt(x);
}
static void Main( ) {
int num = 625; //siempre inicializar!!
Console.WriteLine(“Raiz cuarta: {0}, el número
original es: {1}”, RaizCuarta(ref num), num);
}
C#C#
EstructurasEstructuras de controlde control ((contcont))
Parámetros de salida
Pasan valores hacia fuera, pero no hacia dentro
No se pasan valores al método
Se usa la palabra clave out en la declaración y las llamadas al
método
static void OutDemo(out int p)
{
// ...
}
static void Main( ) {
int n;
OutDemo(out n);
}
static void OutDemo(out int p)
{
// ...
}
static void Main( ) {
int n;
OutDemo(out n);
}
C#C#
Lista de parámetros de longitud variable
Se usa la palabra clave params
Se declara como array al final de la lista de parámetros
Siempre paso por valor
EstructurasEstructuras de controlde control ((contcont))
static long SumaLista(params long[ ] v)
{
long total, i;
for (i = 0, total = 0; i < v.Length; i++)
total += v[i];
return total;
}
static void Main( )
{
long x = SumaLista(63,21,84);
}
static long SumaLista(params long[ ] v)
{
long total, i;
for (i = 0, total = 0; i < v.Length; i++)
total += v[i];
return total;
}
static void Main( )
{
long x = SumaLista(63,21,84);
}
C#C#
Normas para el paso de parámetros:
El paso por valor es el más habitual y suele ser el más eficaz
El valor de retorno del método es útil para un solo valor
ref y/o out son útiles para más de un valor de retorno
ref sólo se usa si los datos se pasan en ambos sentidos
Devolución de arrays desde métodos
EstructurasEstructuras de controlde control ((contcont))
class EjemploArr1 {
static void Main( ) {
int[ ] array = CreateArray(42);
...
}
static int[ ] CreateArray(int tamano) {
int[ ] creada = new int[tamano];
return creada;
}
}
class EjemploArr1 {
static void Main( ) {
int[ ] array = CreateArray(42);
...
}
static int[ ] CreateArray(int tamano) {
int[ ] creada = new int[tamano];
return creada;
}
}
C#C#
Paso de arrays como parámetros
Un parámetro de array es una copia de la variable de array
No es una copia del array
EstructurasEstructuras de controlde control ((contcont))
class EjemploArr2 {
static void Main( )
{
int[ ] arg = {10, 9, 8, 7};
Method(arg);
System.Console.WriteLine(arg[0]);
}
static void Metodo(int[ ] parametro) {
parametro[0]++;
}
}
class EjemploArr2 {
static void Main( )
{
int[ ] arg = {10, 9, 8, 7};
Method(arg);
System.Console.WriteLine(arg[0]);
}
static void Metodo(int[ ] parametro) {
parametro[0]++;
}
}
Este método modificará
el array original
creado en Main
Este método modificará
el array original
creado en Main
C#C#
Métodos recursivos
Hacen llamadas a sí mismos
Útil para resolver ciertos problemas
EstructurasEstructuras de controlde control ((contcont))
static ulong Fibonacci(ulong n)
{
if (n <= 2)
return 1;
else
return Fibonacci(n-1) + Fibonacci(n-2);
}
static ulong Fibonacci(ulong n)
{
if (n <= 2)
return 1;
else
return Fibonacci(n-1) + Fibonacci(n-2);
}
C#C#
Métodos sobrecargados (overloading)
Comparten un nombre en una clase.
Se distinguen examinando la lista de parámetros.
Usarlos cuando hay métodos similares que requieren parámetros
diferentes o si se quiere añadir funcionalidad al código existente.
No abusar pues son difíciles de mantener y de depurar.
EstructurasEstructuras de controlde control ((contcont))
class OverloadingExample
{
static int Suma(int a, int b)
{
return a + b;
}
static int Suma(int a, int b, int c)
{
return a + b + c;
}
static void Main( )
{
Console.WriteLine(Suma(1,2) + Suma(1,2,3));
}
}
class OverloadingExample
{
static int Suma(int a, int b)
{
return a + b;
}
static int Suma(int a, int b, int c)
{
return a + b + c;
}
static void Main( )
{
Console.WriteLine(Suma(1,2) + Suma(1,2,3));
}
}

More Related Content

What's hot (20)

Mars
MarsMars
Mars
 
Funciones con vectores y matrices
Funciones con vectores y matricesFunciones con vectores y matrices
Funciones con vectores y matrices
 
Informe técnico 1
Informe técnico 1Informe técnico 1
Informe técnico 1
 
Creando diagramas de flujo con dfd
Creando diagramas de flujo con dfdCreando diagramas de flujo con dfd
Creando diagramas de flujo con dfd
 
MANUAL DE DFD
MANUAL DE DFD MANUAL DE DFD
MANUAL DE DFD
 
Semana 2 Fundamentos de Python(Ciclos y Listas)
Semana 2   Fundamentos de Python(Ciclos y Listas)Semana 2   Fundamentos de Python(Ciclos y Listas)
Semana 2 Fundamentos de Python(Ciclos y Listas)
 
Visual Basic
Visual BasicVisual Basic
Visual Basic
 
Tipo de dato DOUBLE
Tipo de dato DOUBLETipo de dato DOUBLE
Tipo de dato DOUBLE
 
Manual 2 dfd (1)
Manual 2 dfd (1)Manual 2 dfd (1)
Manual 2 dfd (1)
 
Java
JavaJava
Java
 
Ejemplos c
Ejemplos cEjemplos c
Ejemplos c
 
Clase 5
Clase 5Clase 5
Clase 5
 
Compilador para calcular el área de figuras Triangulo, Cuadrado y Rectángulo.
Compilador para calcular el área de figuras Triangulo, Cuadrado y Rectángulo.Compilador para calcular el área de figuras Triangulo, Cuadrado y Rectángulo.
Compilador para calcular el área de figuras Triangulo, Cuadrado y Rectángulo.
 
Pseudocodigo
PseudocodigoPseudocodigo
Pseudocodigo
 
Guía De Ejercicios Programación Web Básica
Guía De Ejercicios Programación Web BásicaGuía De Ejercicios Programación Web Básica
Guía De Ejercicios Programación Web Básica
 
Lenguaje c (expresiones logicas)
Lenguaje c (expresiones logicas)Lenguaje c (expresiones logicas)
Lenguaje c (expresiones logicas)
 
Practica Tres Delphi
Practica Tres DelphiPractica Tres Delphi
Practica Tres Delphi
 
Funcion scanf
Funcion scanfFuncion scanf
Funcion scanf
 
Arreglos, Procedimientos y Funciones
Arreglos, Procedimientos y FuncionesArreglos, Procedimientos y Funciones
Arreglos, Procedimientos y Funciones
 
Algoritmos - Funciones C++
Algoritmos - Funciones C++ Algoritmos - Funciones C++
Algoritmos - Funciones C++
 

Viewers also liked

Habilidades para la innovación: comunicación colaborativa
Habilidades para la innovación: comunicación colaborativaHabilidades para la innovación: comunicación colaborativa
Habilidades para la innovación: comunicación colaborativaNacho Muñoz
 
Caracteristicas de C Sharp
Caracteristicas de C SharpCaracteristicas de C Sharp
Caracteristicas de C SharpEdgardo Martinez
 
introducción a lenguajes de programacion
introducción a lenguajes de programacionintroducción a lenguajes de programacion
introducción a lenguajes de programacionbretorio
 
Resumen lenguajes c#
Resumen lenguajes c#Resumen lenguajes c#
Resumen lenguajes c#Angie Galeano
 
Analista-programador Cobol - Módulo 1.3
Analista-programador Cobol - Módulo 1.3Analista-programador Cobol - Módulo 1.3
Analista-programador Cobol - Módulo 1.3natachaceleste
 
Programación
 Programación Programación
Programaciónrehoscript
 
Compilador e interpretador
Compilador e interpretadorCompilador e interpretador
Compilador e interpretadorFrancisco Leal
 
Programación desde cero en C# en español
Programación desde cero en C# en españolProgramación desde cero en C# en español
Programación desde cero en C# en españolAnyelo Grullon Mata
 
Introducción a la codificación en lenguaje C
Introducción a la codificación en lenguaje CIntroducción a la codificación en lenguaje C
Introducción a la codificación en lenguaje CCarlos Pes
 

Viewers also liked (18)

Habilidades para la innovación: comunicación colaborativa
Habilidades para la innovación: comunicación colaborativaHabilidades para la innovación: comunicación colaborativa
Habilidades para la innovación: comunicación colaborativa
 
Caracteristicas de C Sharp
Caracteristicas de C SharpCaracteristicas de C Sharp
Caracteristicas de C Sharp
 
sistema operativo
sistema operativosistema operativo
sistema operativo
 
introducción a lenguajes de programacion
introducción a lenguajes de programacionintroducción a lenguajes de programacion
introducción a lenguajes de programacion
 
Resumen lenguajes c#
Resumen lenguajes c#Resumen lenguajes c#
Resumen lenguajes c#
 
Tema 1[1][1]
Tema 1[1][1]Tema 1[1][1]
Tema 1[1][1]
 
Analista-programador Cobol - Módulo 1.3
Analista-programador Cobol - Módulo 1.3Analista-programador Cobol - Módulo 1.3
Analista-programador Cobol - Módulo 1.3
 
Programación
 Programación Programación
Programación
 
1.introduccion java
1.introduccion java1.introduccion java
1.introduccion java
 
Compilador e interpretador
Compilador e interpretadorCompilador e interpretador
Compilador e interpretador
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Programación desde cero en C# en español
Programación desde cero en C# en españolProgramación desde cero en C# en español
Programación desde cero en C# en español
 
C sharp
C sharpC sharp
C sharp
 
Etapas de compilacion
Etapas de compilacionEtapas de compilacion
Etapas de compilacion
 
C# guia total del programador
C# guia total del programadorC# guia total del programador
C# guia total del programador
 
Compiladores, Analisis Lexico Conceptos
Compiladores, Analisis Lexico ConceptosCompiladores, Analisis Lexico Conceptos
Compiladores, Analisis Lexico Conceptos
 
Introducción a la codificación en lenguaje C
Introducción a la codificación en lenguaje CIntroducción a la codificación en lenguaje C
Introducción a la codificación en lenguaje C
 
Axiomas de la comunicación
Axiomas de la comunicaciónAxiomas de la comunicación
Axiomas de la comunicación
 

Similar to 3. lenguaje c-

Des.Apli.Net 02.Sintaxis C Sharp
Des.Apli.Net 02.Sintaxis C SharpDes.Apli.Net 02.Sintaxis C Sharp
Des.Apli.Net 02.Sintaxis C Sharperiveraa
 
3. Uso De Variables De Tipo Valor
3.  Uso De Variables De Tipo Valor3.  Uso De Variables De Tipo Valor
3. Uso De Variables De Tipo ValorEsteban Soraire
 
Estructura sintactica de los lenguajes de programacion
Estructura sintactica de los lenguajes de programacionEstructura sintactica de los lenguajes de programacion
Estructura sintactica de los lenguajes de programacionandreinagracielarojasadam
 
Republica bolivariana de venezuela
Republica bolivariana de venezuelaRepublica bolivariana de venezuela
Republica bolivariana de venezuelaroyimar
 
Diapositivas curso programación orientada a objetos en Java
Diapositivas curso programación orientada a objetos en JavaDiapositivas curso programación orientada a objetos en Java
Diapositivas curso programación orientada a objetos en JavaJose Perez
 
Introducción a C SHARP
Introducción a C SHARPIntroducción a C SHARP
Introducción a C SHARPinfobran
 
tposdedatosc-200924033657.pptx
tposdedatosc-200924033657.pptxtposdedatosc-200924033657.pptx
tposdedatosc-200924033657.pptxErrol31
 
programación Milton.pptx
programación Milton.pptxprogramación Milton.pptx
programación Milton.pptxMundoGamerHD
 
El primer objetivo de un programa informático es el manejo de datos
El primer objetivo de un programa informático es el manejo de datosEl primer objetivo de un programa informático es el manejo de datos
El primer objetivo de un programa informático es el manejo de datosRolando Azcorra Medina
 
Introducción a los Lenguaje de Programación.pptx
Introducción a los Lenguaje de Programación.pptxIntroducción a los Lenguaje de Programación.pptx
Introducción a los Lenguaje de Programación.pptxJosé Luis Alonso Ochoa
 
Elementos basicos de_programacion
Elementos basicos de_programacionElementos basicos de_programacion
Elementos basicos de_programacionthaynasantos1997
 
A1 u1-16230227
A1 u1-16230227A1 u1-16230227
A1 u1-16230227erikalejo
 

Similar to 3. lenguaje c- (20)

Presentación de c #
Presentación de c #Presentación de c #
Presentación de c #
 
Des.Apli.Net 02.Sintaxis C Sharp
Des.Apli.Net 02.Sintaxis C SharpDes.Apli.Net 02.Sintaxis C Sharp
Des.Apli.Net 02.Sintaxis C Sharp
 
3. Uso De Variables De Tipo Valor
3.  Uso De Variables De Tipo Valor3.  Uso De Variables De Tipo Valor
3. Uso De Variables De Tipo Valor
 
Estructura sintactica de los lenguajes de programacion
Estructura sintactica de los lenguajes de programacionEstructura sintactica de los lenguajes de programacion
Estructura sintactica de los lenguajes de programacion
 
Republica bolivariana de venezuela
Republica bolivariana de venezuelaRepublica bolivariana de venezuela
Republica bolivariana de venezuela
 
Diapositivas curso programación orientada a objetos en Java
Diapositivas curso programación orientada a objetos en JavaDiapositivas curso programación orientada a objetos en Java
Diapositivas curso programación orientada a objetos en Java
 
Introducción a C SHARP
Introducción a C SHARPIntroducción a C SHARP
Introducción a C SHARP
 
tposdedatosc-200924033657.pptx
tposdedatosc-200924033657.pptxtposdedatosc-200924033657.pptx
tposdedatosc-200924033657.pptx
 
programación Milton.pptx
programación Milton.pptxprogramación Milton.pptx
programación Milton.pptx
 
ELEMENTOS DE PROGRA 30-05.pdf
ELEMENTOS DE PROGRA 30-05.pdfELEMENTOS DE PROGRA 30-05.pdf
ELEMENTOS DE PROGRA 30-05.pdf
 
Dp2
Dp2Dp2
Dp2
 
El primer objetivo de un programa informático es el manejo de datos
El primer objetivo de un programa informático es el manejo de datosEl primer objetivo de un programa informático es el manejo de datos
El primer objetivo de un programa informático es el manejo de datos
 
Introducción al lenguaje c
Introducción al lenguaje cIntroducción al lenguaje c
Introducción al lenguaje c
 
Introducción a los Lenguaje de Programación.pptx
Introducción a los Lenguaje de Programación.pptxIntroducción a los Lenguaje de Programación.pptx
Introducción a los Lenguaje de Programación.pptx
 
Elementos basicos de_programacion
Elementos basicos de_programacionElementos basicos de_programacion
Elementos basicos de_programacion
 
Lenguaje
LenguajeLenguaje
Lenguaje
 
C# Diferencias
C# DiferenciasC# Diferencias
C# Diferencias
 
A1 u1-16230227
A1 u1-16230227A1 u1-16230227
A1 u1-16230227
 
Poo4
Poo4Poo4
Poo4
 
4 variables, arreglos, estructuras y enum
4 variables, arreglos, estructuras y enum4 variables, arreglos, estructuras y enum
4 variables, arreglos, estructuras y enum
 

Recently uploaded

El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 

Recently uploaded (20)

El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 

3. lenguaje c-

  • 1. ProgramaciProgramacióónn con C#con C# Tema : El lenguaje C#
  • 2. C# ÍÍndicendice Introducción Estructura de los programas Tipos de datos Sistema común 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 repetición Excepciones Funciones y métodos C#
  • 3. C#C# IntroducciIntroduccióónn C# es el último en una línea de evolución de los lenguajes derivados de C, que incluye C++ y Java. Usado por Microsoft para desarrollar la mayoría del código 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 recolección de basura. C# provee acceso al SO, COM y APIs y soporta el modo unsafe que permite el uso de punteros como en C. Más simple que C++ pero tan poderoso y flexible como él.
  • 4. C#C# Estructura de losEstructura de los programasprogramas Un programa en C# contiene: Uno o más ficheros que contienen: Uno o más 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 función Main (punto de entrada al programa) static void Main() static int Main() static void Main(string[] args) static int Main(string[] args) Para acceder a un tipo podemos usar un camino absoluto: System.Console.WriteLine(...); o relativo: using System; ...; Console.WriteLine(...);
  • 5. C#C# EjemploEjemplo:: namespace N1 { class C1 { // ... } struct S1 { // ... } interface I1 { // ... } delegate int D1(); enum E1 { // ... } } Comentarios de una línea: // Comentarios de varias líneas: /* .... */
  • 6. C#C# Sistema común de tipos CTS sistema común de tipos compartido por todos los lenguajes .NET El CTS admite tanto tipos de valor como tipos de referencia Todos los tipos de datos en C# derivan de System.Object sistema de tipos unificado. Cualquier tipo puede ser tratado como un objeto. TiposTipos dede datosdatos Tipos de referenciaTipos de referencia Tipos de datosTipos de datos Tipos de valorTipos de valor - Intrínsecos, - Enumeraciones, - Estructuras - Autodescriptivos: clases y arrays - Interfaces - Punteros
  • 7. C#C# objectCualquier objetoVariableCualquier objetoObject stringEl permitido por la memoriaVariableCadenas de caracteresString char[‘u0000’, ‘uFFFF’]16Caracteres UnicodeChar booltrue, false32Valores lógicosBoolean decimal[1,0×10-28 - 7,9×1028]128Reales de 28-29 dígitos de precisiónDecimal double[5,0×10-324 - 1,7×10308]64Reales de 15-16 dígitos de precisiónDouble float[1,5×10-45 - 3,4×1038]32Reales con 7 dígitos de precisiónSingle ulong[0-18.446.744.073.709.551.615]64Enteros largos sin signoUInt64 long [-9.223.372.036.854.775.808, 9.223.372.036.854.775.807] 64Enteros largos Int64 uint[0, 4.294.967.295]32Enteros normales sin signoUInt32 int[-2.147.483.648, 2.147.483.647]32Enteros normalesInt32 ushort[0, 65.535]16Enteros cortos sin signoUInt16 short[-32.768, 32.767]16Enteros cortos con signoInt16 byte[ 0 , 255]8Bytes sin signoByte sbyte[-128, 127]8Bytes con signoSByte AliasRango de valoresBitsDescripciónTipo TiposTipos dede datosdatos bbáásicossicos
  • 8. C#C# Identificadores Se usan para dar nombres a los elementos de un programa como variables, constantes y métodos. Consta de caracteres alfanuméricos y _ Sensible a mayúsculas y minúsculas. Comenzar con letra o _ Palabras reservadas: Si se quiere usar un identificador que es una palabra reservada hay que usar como prefijo el carácter ‘@’: Object @this; // @ previene el conflicto con "this" TiposTipos dede datosdatos ((contcont))
  • 9. C#C# Variables Una variable en C# representa la localización en memoria donde una instancia de un tipo es guardada Es simplemente una capa encima del sistema de tipos independiente del lenguaje de .NET (CTS) Recordar la distinción entre tipos de valor y tipos de referencia 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 TiposTipos dede datosdatos ((contcont))
  • 10. C#C# Comparación entre variables tipo valor y tipo referencia: Variables de tipo valor: Contienen sus datos directamente Cada una tiene su propia copia de datos Las operaciones sobre una no afectan a otra Variables de tipo valor: Contienen sus datos directamente Cada una tiene su propia copia de datos Las operaciones sobre una no afectan a otra Variables de tipo referencia: Almacenan referencias a sus datos (conocidos como objetos) Dos variables de referencia pueden apuntar al mismo objeto Las operaciones sobre una pueden afectar a otra Variables de tipo referencia: Almacenan referencias a sus datos (conocidos como objetos) Dos variables de referencia pueden apuntar al mismo objeto Las operaciones sobre una pueden afectar a otra TiposTipos dede datosdatos ((contcont))
  • 11. C#C# Las variables de valor pueden iniciarse al declararse: bool bln = true; byte byt1 = 22; char ch1=‘x’, ch2=‘u0061’; // Unicode para ‘a’ decimal dec1 = 1.23M; double dbl1=1.23, dbl2=1.23D; short sh = 22; int i = 22; long lng1 =22, lng2 =22L; // ‘L’ long sbyte sb = 22; float f=1.23F; ushort us1=22; uint ui1=22, ui2=22U; // ‘U’ unsigned ulong ul1 =22, ul2=22U, ul3=22L, ul4=2UL; TiposTipos dede datosdatos ((contcont))
  • 12. C#C# 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 = "Holan"; // salto de línea string s2 = "Holatquettal"; // tabulador Como las sentencias de escape comienzan con ‘’, para escribir este carácter hay que doblarlo, o usar ‘@’: string s3 = "c:WINNT"; string s4 = @"C:WINNT"; TiposTipos dede datosdatos ((contcont))
  • 13. C#C# 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(); } } } TiposTipos dede datosdatos ((contcont)) Ámbito: conjunto de código donde una variable es visible. La visibilidad de una variable fuera de su ámbito se puede modificar anteponiendo public o private en la declaración.
  • 14. C#C# using System; namespace ConsoleAppVisibilitatSTAT { class Simple { public static int Var3=30; //pública i estàtica static int Var4=40; //privada i estàtica 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(); } } } TiposTipos dede datosdatos ((contcont)) static: Variable estática, existe durante toda la ejecución del programa. Sólo 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
  • 15. C#C# 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); // también Console.WriteLine(max, min, rango); } } TiposTipos dede datosdatos ((contcont))
  • 16. C#C# Tipos definidos por el usuario: Enumeraciones TiposTipos dede datosdatos Definición de una enumeración: enum Color { Rojo, Verde, Azul } Uso de una enumeración: Color colorPaleta = Color.Rojo; o colorPaleta = (Color)0; // Tipo int a Color Visualización de una variable de enumeración: Console.WriteLine(“{0}”, colorPaletta); // Muestra Rojo
  • 17. C#C# Tipos definidos por el usuario: Estructuras Definición: struct Empleado { public string nombre; public int edad; } Uso: Empleado empresaEmpleado, otroEmpleado; empresaEmpleado.Nombre = "Juan"; empresaEmpleado.edad = 23; otroEmpleado = empresaEmpleado; //asignación directa Comparación: método Equals(), no usar operador == TiposTipos dede datosdatos ((contcont))
  • 18. C#C# Conversión entre tipos de datos int intValor = 123; long longValor = intValor; // implícita de int a long intvalor = (int) longValor; // explícita de long a int con cast int x = 123456; long y = x; // implícita short z = (short)x; // explícita double d = 1.2345678901234; float f = (float)d; // explícita long l = (long)d; // explícita TiposTipos dede datosdatos ((contcont)) Conversión implícita Ocurre de forma automática Siempre tiene éxito Nunca se pierde información en la conversión Conversión implícita Ocurre de forma automática Siempre tiene éxito Nunca se pierde información en la conversión Conversión explícita Requiere la realización del cast Puede no tener éxito Puede perderse información en la conversión Conversión explícita Requiere la realización del cast Puede no tener éxito Puede perderse información en la conversión
  • 19. C#C# Operadores yOperadores y expresionesexpresiones Operadores aritméticos: +, Suma unaria , +a -, Resta unaria, -a ++, Incremento, ++a o a++ --, Decremento, --a o a-- +, Suma, a+b -, Resta, a-b *, Multiplicación, a*b /, División, a/b %, Resto, a%b Operadores relacionales: ==, 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 !, Negación , !a &, And binario, a&b |, Or binario, a|b ^, Or exclusivo, a^b ~, Negación binaria, ~a &&, And lógico, a&&b ||, Or lógico, a||b Operadores de manipulación de bits: int i1=32; int i2=i1<<2; // i2==128 int i3=i1>>3; // i3==4
  • 20. C#C# 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 conversión 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 tamaño de un tipo en bytes * para obtener la variable a la que apunta un puntero ->, p->m es lo mismo que (*).m & devuelve la dirección de un operando Las expresiones en C# son similares a C y C++ Operadores yOperadores y expresionesexpresiones ((contcont))
  • 21. C#C# Operadores yOperadores y expresionesexpresiones ((contcont)) Precedencia Asociatividad Todos los operadores binarios, salvo los de asignación, son asociativos por la izquierda Los operadores de asignación y el operador condicional(?) son asociativos por la derecha + Operadores Asociatividad Tipo () Izquierda a derecha Paréntesis * / % Izquierda a derecha Multiplicativos + - Izquierda a derecha Adición < <= > >= Izquierda a derecha Relacionales == != Izquierda a derecha Igualdad - = Derecha a izquierda Asignación
  • 22. C#C# 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"}}; TiposTipos dede datosdatos ((contcont))
  • 23. C#C# El rango de los elementos del array es dinámico: Si se crea un nuevo array sobre el mismo se libera la memoria que ocupaba y se pierde toda la información que contenia. Información sobre un array: Dimensiones: Rank Número de elementos: GetLength() Índice superior e inferior: GetLowerBound(d); GetUpperBound(d) (d=dimensión, desde 0 hasta Rank-1) Saber si es un array: if (a is Array) .... Recorrido de los elementos de un array sin conocer sus índices foreach (string a in animales) Console.WriteLine(a); Otras operaciones: Clone(); Copy(); Sort(); TiposTipos dede datosdatos ((contcont))
  • 24. C#C# Caracteres y cadenas Dos tipos para manipular caracteres: char y string char puede contener cualquier carácter 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. Concatenación: operador + (no existe en C ,C++) o usar Concat(): string a, b; a="Programación "; b="con C#"; Console.WriteLine(“Usando +: {0}", a+b); Console.WriteLine(" Usando concat: {0}", string.Concat(a, b)); TiposTipos dede datosdatos ((contcont))
  • 25. C#C# EstructurasEstructuras de controlde control Un bloque y su bloque padre o pueden tener una variable con el mismo nombre { int i; ... { int i; ... } } Bloques hermanos pueden tener variables con el mismo nombre { int i; ... } ... { int i; ... } Instrucciones Pueden ocupar más de una línea y deben terminarse con un ; int i, j; i=1; Grupos de instrucciones se pueden agrupar en bloques con { y } { j=2; i=i+j; }
  • 26. C#C# EstructurasEstructuras de controlde control ((contcont)) Condicionales if (<condición>) <sentenciasCondTrue> if (<condición>) { <sentenciasCondTrue> [else { <sentenciasCondFalse> } ] Ejemplo: if (a>b) Mayor=a; if (a>b) { Mayor=a; Menor=b; } else { Mayor=b; Menor=a; }
  • 27. C#C# EstructurasEstructuras de controlde control ((contcont)) 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";
  • 28. C#C# EstructurasEstructuras de controlde control ((contcont)) Condicionales múltiples switch (<expressión>) { 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 válido); break; }
  • 29. C#C# De repetición 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) { //múltiples expresiones System.Console.WriteLine("i=" + i + ", j=" + j); } EstructurasEstructuras de controlde control ((contcont))
  • 30. C#C# while Ejecuta instrucciones en función de un valor booleano Evalúa la expresión booleana al principio del bucle EstructurasEstructuras de controlde control ((contcont)) while (true) { ... } while (true) { ... } int i = 0; while (i < 10) { Console.WriteLine(i); i++; } int i = 0; while (i < 10) { Console.WriteLine(i); i++; } 0 1 2 3 4 5 6 7 8 90 1 2 3 4 5 6 7 8 9 int i = 10; while (i > 5) { ... i--; } int i = 10; while (i > 5) { ... i--; }
  • 31. C#C# do Ejecuta instrucciones en función de un valor booleano Evalúa la expresión booleana al final del bucle EstructurasEstructuras de controlde control ((contcont)) int i = 0; do { Console.WriteLine(i); i++; } while (i <= 10); int i = 0; do { Console.WriteLine(i); i++; } while (i <= 10); 0 1 2 3 4 5 6 7 8 9 100 1 2 3 4 5 6 7 8 9 10 int i = 10; do { ... i--; } while (i > 5); int i = 10; do { ... i--; } while (i > 5); do { ... } while (true); do { ... } while (true);
  • 32. C#C# Instrucciones de salto continue: Salta el resto de la iteración y comienza la siguiente for (int i=1; i<=5; i++) { if (i==3) continue; Console.WriteLine(i); } break : Permite salir de un bucle: for (int i=1; i<=5; i++) { if (i==3) break; Console.WriteLine(i); } foreach: ejecuta instrucciones para cada elemento de una colección public static void Main(string[] args) { foreach (string s in args) Console.WriteLine(s); //muestra las cadenas de args una a una } return [<expresión>]: Sale del método actual throw : lanza una excepción EstructurasEstructuras de controlde control ((contcont))
  • 33. C#C# 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: EstructurasEstructuras de controlde control ((contcont)) int errorCodigo = 0; FileInfo source = new FileInfo("code.cs"); if (errorCodigo == -1) goto Fallo; int longitud = (int)source.Length; if (errorCodigo == -2) goto Fallo; char[] contenido = new char[longitud]; if (errorCodigo == -3) goto Fallo; // No hay problemas ... Fallo: ... int errorCodigo = 0; FileInfo source = new FileInfo("code.cs"); if (errorCodigo == -1) goto Fallo; int longitud = (int)source.Length; if (errorCodigo == -2) goto Fallo; char[] contenido = new char[longitud]; if (errorCodigo == -3) goto Fallo; // No hay problemas ... Fallo: ... Lógica del programaLógica del programa Trat. De erroresTrat. De errores
  • 34. C#C# Todas las excepciones derivan de System.Exception EstructurasEstructuras de controlde control ((contcont)) ExceptionException SystemExceptionSystemException OutOfMemoryExceptionOutOfMemoryException IOExceptionIOException NullReferenceExceptionNullReferenceException ApplicationExceptionApplicationException
  • 35. C#C# Tratamiento de excepciones orientado a objetos : try { ... // bloque normal de código } catch { ... // bloque que controla la excepción }[ finally { ... // bloque de finalización que siempre se ejecuta }] Ejemplo: try { Console.WriteLine("Escriba un número"); int i = int.Parse(Console.ReadLine()); } catch (OverflowException capturada) { Console.WriteLine(capturada); } EstructurasEstructuras de controlde control ((contcont))
  • 36. C#C# Cada bloque catch captura una clase de excepción 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 excepción derivada de una clase capturada en un bloque catch anterior … try { Console.WriteLine(“Escriba el primer número"); int i = int.Parse(Console.ReadLine()); Console.WriteLine("Escriba el segundo número"); int j = int.Parse(Console.ReadLine()); int k = i / j; } catch (OverflowException capturada) { Console.WriteLine(capturada); } catch (DivideByZeroException capturada) {Console.WriteLine(capturada); } catch {…} // también: catch (Exception x) { … } ... EstructurasEstructuras de controlde control ((contcont))
  • 37. C#C# Funciones y métodos En C# todo son funciones, no existen procedimientos. Todas las funciones siempre pertenecen a una clase, luego son todas las funciones son métodos. Los métodos, por defecto, son privados (private) Main es un método y para definir métodos propios se usa la misma sintaxis: using System; class EjemploClase { static void EjemploMetodo( ) { Console.WriteLine("Este es un ejemplo de método"); } static void Main( ) { // ... } } EstructurasEstructuras de controlde control ((contcont))
  • 38. C#C# Una vez definido un método, se puede: Llamar a un método desde dentro de la misma clase Se usa el nombre del método seguido de una lista de parámetros entre paréntesis Llamar a un método que está en una clase diferente Hay que indicar al compilador cuál es la clase que contiene el método que se desea llamar El método llamado se debe declarar con la palabra clave public Usar llamadas anidadas Unos métodos pueden hacer llamadas a otros, que a su vez pueden llamar a otros métodos, y así sucesivamente. EstructurasEstructuras de controlde control ((contcont))
  • 39. C#C# Variables locales Se crean cuando comienza el método Son privadas para el método Se destruyen a la salida Variables compartidas Para compartir se utilizan variables de clase Conflictos de ámbito El compilador no avisa si hay conflictos entre nombres locales y de clase. EstructurasEstructuras de controlde control ((contcont))
  • 40. C#C# Devolución de valores El método se debe declarar con un tipo que no sea void Se añade una instrucción return con una expresión Fija el valor de retorno Se devuelve al llamador Los métodos que no son void deben devolver un valor EstructurasEstructuras de controlde control ((contcont)) static int DosMasDos( ) { int a,b; a = 2; b = 2; return a + b; } static int DosMasDos( ) { int a,b; a = 2; b = 2; return a + b; } int x; x = DosMasDos( ); Console.WriteLine(x); int x; x = DosMasDos( ); Console.WriteLine(x);
  • 41. C#C# EstructurasEstructuras de controlde control ((contcont)) Parámetros Declaración de parámetros Se ponen entre paréntesis después del nombre del método Se definen el tipo y el nombre de cada parámetro Llamadas a métodos con parámetros Un valor para cada parámetro Paso por valor, por referencia y parámetros de salida static void MetodoConParametros(int n, string y) { ... } MetodoConParametros(2, "Hola, mundo"); static void MetodoConParametros(int n, string y) { ... } MetodoConParametros(2, "Hola, mundo");
  • 42. C#C# EstructurasEstructuras de controlde control ((contcont)) Paso por valor Se copia el valor del parámetro Se puede cambiar el nombre de la variable dentro del método No afecta al valor fuera del método El parámetro debe ser de un tipo igual o compatible static void SumaUno(int x) { x++; // Incrementar x } static void Main( ) { int k = 6; SumaUno(k); Console.WriteLine(k); // Muestra el valor 6, no 7 static void SumaUno(int x) { x++; // Incrementar x } static void Main( ) { int k = 6; SumaUno(k); Console.WriteLine(k); // Muestra el valor 6, no 7
  • 43. C#C# EstructurasEstructuras de controlde control ((contcont)) Paso por referencia Se pasa una referencia a una posición de memoria Se usa la palabra clave ref en la declaración y las llamadas al método Los tipos y valores de variables deben coincidir Los cambios hechos en el método afectan al llamador Hay que asignar un valor al parámetro antes de la llamada al método static int RaizCuarta(ref int x) { x = (int)Math.Sqrt(x); return (int)Math.Sqrt(x); } static void Main( ) { int num = 625; //siempre inicializar!! Console.WriteLine(“Raiz cuarta: {0}, el número original es: {1}”, RaizCuarta(ref num), num); } static int RaizCuarta(ref int x) { x = (int)Math.Sqrt(x); return (int)Math.Sqrt(x); } static void Main( ) { int num = 625; //siempre inicializar!! Console.WriteLine(“Raiz cuarta: {0}, el número original es: {1}”, RaizCuarta(ref num), num); }
  • 44. C#C# EstructurasEstructuras de controlde control ((contcont)) Parámetros de salida Pasan valores hacia fuera, pero no hacia dentro No se pasan valores al método Se usa la palabra clave out en la declaración y las llamadas al método static void OutDemo(out int p) { // ... } static void Main( ) { int n; OutDemo(out n); } static void OutDemo(out int p) { // ... } static void Main( ) { int n; OutDemo(out n); }
  • 45. C#C# Lista de parámetros de longitud variable Se usa la palabra clave params Se declara como array al final de la lista de parámetros Siempre paso por valor EstructurasEstructuras de controlde control ((contcont)) static long SumaLista(params long[ ] v) { long total, i; for (i = 0, total = 0; i < v.Length; i++) total += v[i]; return total; } static void Main( ) { long x = SumaLista(63,21,84); } static long SumaLista(params long[ ] v) { long total, i; for (i = 0, total = 0; i < v.Length; i++) total += v[i]; return total; } static void Main( ) { long x = SumaLista(63,21,84); }
  • 46. C#C# Normas para el paso de parámetros: El paso por valor es el más habitual y suele ser el más eficaz El valor de retorno del método es útil para un solo valor ref y/o out son útiles para más de un valor de retorno ref sólo se usa si los datos se pasan en ambos sentidos Devolución de arrays desde métodos EstructurasEstructuras de controlde control ((contcont)) class EjemploArr1 { static void Main( ) { int[ ] array = CreateArray(42); ... } static int[ ] CreateArray(int tamano) { int[ ] creada = new int[tamano]; return creada; } } class EjemploArr1 { static void Main( ) { int[ ] array = CreateArray(42); ... } static int[ ] CreateArray(int tamano) { int[ ] creada = new int[tamano]; return creada; } }
  • 47. C#C# Paso de arrays como parámetros Un parámetro de array es una copia de la variable de array No es una copia del array EstructurasEstructuras de controlde control ((contcont)) class EjemploArr2 { static void Main( ) { int[ ] arg = {10, 9, 8, 7}; Method(arg); System.Console.WriteLine(arg[0]); } static void Metodo(int[ ] parametro) { parametro[0]++; } } class EjemploArr2 { static void Main( ) { int[ ] arg = {10, 9, 8, 7}; Method(arg); System.Console.WriteLine(arg[0]); } static void Metodo(int[ ] parametro) { parametro[0]++; } } Este método modificará el array original creado en Main Este método modificará el array original creado en Main
  • 48. C#C# Métodos recursivos Hacen llamadas a sí mismos Útil para resolver ciertos problemas EstructurasEstructuras de controlde control ((contcont)) static ulong Fibonacci(ulong n) { if (n <= 2) return 1; else return Fibonacci(n-1) + Fibonacci(n-2); } static ulong Fibonacci(ulong n) { if (n <= 2) return 1; else return Fibonacci(n-1) + Fibonacci(n-2); }
  • 49. C#C# Métodos sobrecargados (overloading) Comparten un nombre en una clase. Se distinguen examinando la lista de parámetros. Usarlos cuando hay métodos similares que requieren parámetros diferentes o si se quiere añadir funcionalidad al código existente. No abusar pues son difíciles de mantener y de depurar. EstructurasEstructuras de controlde control ((contcont)) class OverloadingExample { static int Suma(int a, int b) { return a + b; } static int Suma(int a, int b, int c) { return a + b + c; } static void Main( ) { Console.WriteLine(Suma(1,2) + Suma(1,2,3)); } } class OverloadingExample { static int Suma(int a, int b) { return a + b; } static int Suma(int a, int b, int c) { return a + b + c; } static void Main( ) { Console.WriteLine(Suma(1,2) + Suma(1,2,3)); } }