Presentación de c #

32
Presentación Presentación De : De :

description

Una pequeña (?) presentacion acerca de algunos aspectos basicos de C#.Como sus Variables, objetos, clases y métodos.

Transcript of Presentación de c #

Page 1: Presentación de c #

PresentaciónPresentaciónDe :De :

Page 2: Presentación de c #

¿ Qué es C # ?¿ Qué es C # ?

C #C # (pronunciado (pronunciado si sharp si sharp en inglés) es un lenguaje de en inglés) es un lenguaje de programación orientado a objetos desarrollado y programación orientado a objetos desarrollado y estandarizado por Microsoft como parte de su estandarizado por Microsoft como parte de su plataforma .NET, que después fue aprobado como un plataforma .NET, que después fue aprobado como un estándar por la ECMA e ISO.estándar por la ECMA e ISO.

Su sintaxis básica deriva de C/C++ y utiliza el modelo de Su sintaxis básica deriva de C/C++ y utiliza el modelo de objetos de la plataforma .NET, similar al de Java aunque objetos de la plataforma .NET, similar al de Java aunque incluye mejoras derivadas de otros lenguajes (entre ellos incluye mejoras derivadas de otros lenguajes (entre ellos Delphi ).Delphi ).

La creación del nombre del lenguaje, C ♯, proviene de dibujar La creación del nombre del lenguaje, C ♯, proviene de dibujar dos signos positivos encima de los dos signos positivos de dos signos positivos encima de los dos signos positivos de "C++", queriendo dar una imagen de salto evolutivo, del "C++", queriendo dar una imagen de salto evolutivo, del mismo modo que ocurrió con el paso de C a C++.mismo modo que ocurrió con el paso de C a C++.

Fuente : Wikipedia

Page 3: Presentación de c #

Contenido de C #Contenido de C #C # contiene y trabaja con este tipo de objetos, clases, métodos y demás :

Tipos de DatosTipos de Datos Arreglos y MatricesArreglos y Matrices

Variables y ConstantesVariables y Constantes OperadoresOperadores

ControlesControles Clases y ObjetosClases y Objetos

Fuentes: WikiPedia.org - WikiBooks.org

Page 4: Presentación de c #

Tipos de DatosTipos de DatosLos tipos de datos son la base de cualquier programa. Un tipo no es Los tipos de datos son la base de cualquier programa. Un tipo no es

más que un espacio en el que se almacena una información, ya más que un espacio en el que se almacena una información, ya sean números, palabras o tu fecha de nacimiento.sean números, palabras o tu fecha de nacimiento.

C# es un lenguaje de tipeado seguro lo cual quiere decir que el C# es un lenguaje de tipeado seguro lo cual quiere decir que el programador define a que tipo pertenece cada objeto que se crea. programador define a que tipo pertenece cada objeto que se crea. De esta forma podemos crear objetos de tipo número entero, De esta forma podemos crear objetos de tipo número entero, cadenas de texto, ventana, botones, entre otros. Haciendo esto, C# cadenas de texto, ventana, botones, entre otros. Haciendo esto, C# ayudará a mantener nuestro código seguro en donde cada tipo ayudará a mantener nuestro código seguro en donde cada tipo cumple con su función. En todas las operaciones el compilador cumple con su función. En todas las operaciones el compilador comprueba los tipos para ver su compatibilidad. Las operaciones comprueba los tipos para ver su compatibilidad. Las operaciones no válidas no se compilan. De esta forma se evitan muchos errores no válidas no se compilan. De esta forma se evitan muchos errores y se consigue una mayor fiabilidad. Esto también permite a C# y se consigue una mayor fiabilidad. Esto también permite a C# anticipar de antemano la cantidad de recursos del sistema que anticipar de antemano la cantidad de recursos del sistema que nuestro programa utilizará haciendo nuestro código seguro y nuestro programa utilizará haciendo nuestro código seguro y eficiente. eficiente.

Fuente : Wikibooks

Page 5: Presentación de c #

Tipos Básicos o InternosTipos Básicos o InternosTipo C#Tipo C# Bytes UtilizadosBytes Utilizados Valores que SoportaValores que Soporta

BoolBool 11 True o false (Verdadero o Falso en Ingles)True o false (Verdadero o Falso en Ingles)

ByteByte 11 0 hasta 2550 hasta 255

SbyteSbyte 11 -128 hasta 127-128 hasta 127

ShortShort 22 -32.768 hasta 32.767-32.768 hasta 32.767

UshortUshort 22 0 hasta 655350 hasta 65535

IntInt 44 -2.147.483.648 hasta 2.147.483.647-2.147.483.648 hasta 2.147.483.647

UintUint 44 0 hasta 4.394.967.3950 hasta 4.394.967.395

LongLong88

-9.223.372.036.854.775.808 hasta -9.223.372.036.854.775.808 hasta 9.223.372.036.854.775.8079.223.372.036.854.775.807

UlongUlong 88 0 hasta 184467440737095516150 hasta 18446744073709551615

FloatFloat44

Aproximadamente ±1.5E-45 hasta ±3.4E38 con 7 cifras Aproximadamente ±1.5E-45 hasta ±3.4E38 con 7 cifras significativassignificativas

DoubleDouble88

Aproximadamente ±5.0E-324 hasta ±1.7E308 con 7 cifras Aproximadamente ±5.0E-324 hasta ±1.7E308 con 7 cifras significativassignificativas

DecimalDecimal1212 Aproximadamente ±1.0E-28 hasta ±7.9E28 con 28 ó 29 Aproximadamente ±1.0E-28 hasta ±7.9E28 con 28 ó 29

cifras significativascifras significativas

CharChar 22 Cualquier carácter Unicode (16 bits)Cualquier carácter Unicode (16 bits)

Page 6: Presentación de c #

Tipos Tipos enteros :enteros :

Los tipos que sirven para almacenar números enteros Los tipos que sirven para almacenar números enteros son: byte, sbyte. short, ushort, int, uint, long y son: byte, sbyte. short, ushort, int, uint, long y ulong. Como se aprecia en la tabla, C# define ulong. Como se aprecia en la tabla, C# define versiones con y sin signo para tipos con los versiones con y sin signo para tipos con los mismos bytes utilizados. Cada tipo se distingue mismos bytes utilizados. Cada tipo se distingue por la capacidad de almacenaje.por la capacidad de almacenaje.

Probablemente el tipo más utilizado es el int, púes Probablemente el tipo más utilizado es el int, púes se utiliza para controlar matrices, indexar arreglos se utiliza para controlar matrices, indexar arreglos (arrays) además de las operaciones normales con (arrays) además de las operaciones normales con enteros. Además, se trata de un entero de tamaño enteros. Además, se trata de un entero de tamaño medio: más pequeño que long y ulong, pero más medio: más pequeño que long y ulong, pero más grande que byte, sbyte, short y ushort.grande que byte, sbyte, short y ushort.

Los tipos de coma flotante sirven para representar a Los tipos de coma flotante sirven para representar a números con parte fraccionaria. La representación números con parte fraccionaria. La representación por supuesto puede no ser exacta, bien por errores por supuesto puede no ser exacta, bien por errores de la máquina, bien porque el número de decimales de la máquina, bien porque el número de decimales que se puede alojar es finito.que se puede alojar es finito.

Existen tres clases de tipos de punto flotante: float, Existen tres clases de tipos de punto flotante: float, double y decimal. De los dos, el más usado es double y decimal. De los dos, el más usado es double, púes es el valor que devuelven la mayoría double, púes es el valor que devuelven la mayoría de las funciones matemáticas de la librería base.de las funciones matemáticas de la librería base.

Tipos de Tipos de coma coma

flotante :flotante :

Page 7: Presentación de c #

Tipo Tipo Bool :Bool :

El tipo bool sirve para expresar los valores verdadero/falso, que en El tipo bool sirve para expresar los valores verdadero/falso, que en C# se muestran con las palabras reservadas true y false.C# se muestran con las palabras reservadas true y false.

En C#, por ejemplo, una instrucción de condición solo puede En C#, por ejemplo, una instrucción de condición solo puede estar gobernada por un valor bool, no como en C/C++, que lo estar gobernada por un valor bool, no como en C/C++, que lo puede estar también por un entero. De esta forma se ayuda a puede estar también por un entero. De esta forma se ayuda a eliminar el error tan frecuente en programadores de C/C++ eliminar el error tan frecuente en programadores de C/C++ cuando usa "=" en lugar de "==". En definitiva, la inclusión del cuando usa "=" en lugar de "==". En definitiva, la inclusión del tipo bool en el lenguaje ayuda a la claridad del código y evita tipo bool en el lenguaje ayuda a la claridad del código y evita algunos errores muy comunes.algunos errores muy comunes.

El tipo char permite almacenar un carácter en formato simple, El tipo char permite almacenar un carácter en formato simple, unicode de 16 bits o caracteres de escape. Usando el formato unicode de 16 bits o caracteres de escape. Usando el formato unicode nos garantiza que los acentos se ven de forma unicode nos garantiza que los acentos se ven de forma adecuada y además permite la representación de otros adecuada y además permite la representación de otros alfabetos, como el japonés, griego, cirílico, etc. Para introducir alfabetos, como el japonés, griego, cirílico, etc. Para introducir un carácter se utilizan comillas simples.un carácter se utilizan comillas simples.

Los tipos cadena (palabra clave Los tipos cadena (palabra clave stringstring) son tipos que almacenan ) son tipos que almacenan un grupo de caracteres. En C# los tipos cadena se crean con la un grupo de caracteres. En C# los tipos cadena se crean con la palabra clave palabra clave stringstring seguido por el nombre de la variable que seguido por el nombre de la variable que deseamos instanciar. Para asignar un valor a este tipo deseamos instanciar. Para asignar un valor a este tipo debemos hacerlo entre comillasdebemos hacerlo entre comillas

Tipo Tipo Char :Char :

Tipo Tipo String :String :

Page 8: Presentación de c #

Arreglos y Matrices :Arreglos y Matrices :En C# se pueden construir arreglos de prácticamente cualquier tipo de dato. Los

arreglos, también llamados vectores o arrays, no son más que una sucesión de datos del mismo tipo. Por ejemplo, el concepto matemático de vector es una sucesión de números y por lo tanto es un arreglo unidimensional. Así, podemos construir arreglos de objetos, de cadenas de texto, y, por supuesto, arreglos de enteros.

Para crear un arreglo debemos especificar de qué tipo deseamos crear el arreglo seguido por corchetes [ ] que es el distintivo del arreglo, seguido por la palabra clave new y el tipo y la cantidad de parámetros que tendrá nuestro arreglo.

Resumen: En C♯ las matrices se implementan como objetos. Para crear una matriz se utiliza el siguiente formato: tipo[] nombre_matriz =

new tipo [ tamaño]; Se puede crear una matriz inicializada así: tipo[] nombre_matriz = { val1 , val2 ,

val3 , ... , valN }; Los índices de las matrices comienzan en 0. Para crear una matriz bidimensional se utiliza el siguiente formato: tipo[,]

nombre_matriz = new tipo [filas, columnas] Para referirse a un elemento de una matriz bidimensional no se usa la forma

matriz [fila][columna] (la cual usa C++), si no matriz [fila, columna]. Ya que C♯ implementa matrices como objetos, cada matriz tiene asociada una

propiedad Length que contiene el número de elementos que puede alojar cada matriz.

Page 9: Presentación de c #

Identificadores de Variables o Identificadores de Variables o Nombres :Nombres :

En una aplicación siempre se deben crear variables, constantes, En una aplicación siempre se deben crear variables, constantes, métodos, objetos, etc. Para poder crearlos debemos asignar nombres métodos, objetos, etc. Para poder crearlos debemos asignar nombres o identificadores. Estos identificadores deben seguir ciertas reglas:o identificadores. Estos identificadores deben seguir ciertas reglas:

Un identificador DEBE empezar con una letra o un signo _ Un identificador DEBE empezar con una letra o un signo _ Un identificador NO puede tener espacios en blanco Un identificador NO puede tener espacios en blanco Un identificador NO puede llevar el mismo nombre que una palabra Un identificador NO puede llevar el mismo nombre que una palabra

clave clave Después de que el identificador empiece con una letra o un símbolo _, el Después de que el identificador empiece con una letra o un símbolo _, el

identificador puede tener cualquier cantidad de letras, líneas o identificador puede tener cualquier cantidad de letras, líneas o números.números.

Nota:Nota: Es recomendado que las variables siempre empiecen con Es recomendado que las variables siempre empiecen con minúsculas y que sigan el patrón llamado minúsculas y que sigan el patrón llamado CamelloCamello es decir que el es decir que el nombre de la variable que tenga varias palabras debe ser formado de nombre de la variable que tenga varias palabras debe ser formado de la siguiente manera: la primera palabra empezará con minúsculas la siguiente manera: la primera palabra empezará con minúsculas pero la segunda, tercera, etc palabras estarán unidas a la primera y pero la segunda, tercera, etc palabras estarán unidas a la primera y tendrán su primera letra en mayúsculas ejemplo: tendrán su primera letra en mayúsculas ejemplo: miVariablemiVariable. También . También se ha recomendado que el nombre de Métodos, Clases y demás se ha recomendado que el nombre de Métodos, Clases y demás nombres que necesitamos especificar deberán llevar el mismo formato nombres que necesitamos especificar deberán llevar el mismo formato anterior con la excepción de que la Primera letra deberá ser anterior con la excepción de que la Primera letra deberá ser mayúscula. mayúscula.

Page 10: Presentación de c #

Variables :Variables :

Una variable es el nombre que se le da al espacio Una variable es el nombre que se le da al espacio donde se almacena la información de los tipos. donde se almacena la información de los tipos. Las variables pueden llevar cualquier nombre que Las variables pueden llevar cualquier nombre que deseemos, eso sí no se podrá hacer uso de deseemos, eso sí no se podrá hacer uso de palabras claves de C#. palabras claves de C#.

Para crear una variable debemos especificar a qué Para crear una variable debemos especificar a qué tipo pertenece antes del nombre que le vamos a tipo pertenece antes del nombre que le vamos a dar. Por ejemplo si deseamos crear una variable dar. Por ejemplo si deseamos crear una variable que se llame que se llame varvar y que sea del tipo entero ( y que sea del tipo entero (intint) ) quedaría así:quedaría así:

Tipo de Variable -> intTipo de Variable -> int var; <-Identificador o nombre var; <-Identificador o nombre

Page 11: Presentación de c #

Conversión de Variables :Conversión de Variables :Las conversiones de tipo de variables en C♯ se representan en la siguiente tabla en donde Las conversiones de tipo de variables en C♯ se representan en la siguiente tabla en donde

la fila es el origen y la columna el destino. Los significados de las letras son: la fila es el origen y la columna el destino. Los significados de las letras son: AA (Conversión automática o implícita), (Conversión automática o implícita), EE (Conversión explícita), (Conversión explícita), II (Conversión (Conversión incompatible).incompatible).

-----------HAZ CLICK PARA VER IMAGEN------------Y DEVUELTA PARA SACARLA------------------------HAZ CLICK PARA VER IMAGEN------------Y DEVUELTA PARA SACARLA------------- Toda conversión implícita no ocasiona pérdida de información, truncamientos o Toda conversión implícita no ocasiona pérdida de información, truncamientos o

redondeos. redondeos. Es posible (mas no siempre ocurre) que en una conversión explícita haya pérdida de Es posible (mas no siempre ocurre) que en una conversión explícita haya pérdida de

información, truncamientos o redondeos. información, truncamientos o redondeos. En toda conversión implícita el tipo de dato destino es mayor que el tipo de dato origen. En toda conversión implícita el tipo de dato destino es mayor que el tipo de dato origen. La conversión explícita se realiza de la siguiente forma: (tipo-destino) expresión. La conversión explícita se realiza de la siguiente forma: (tipo-destino) expresión. Además de realizarse dentro de una asignación, las conversiones de tipos también Además de realizarse dentro de una asignación, las conversiones de tipos también

tienen lugar dentro de una expresión, pues en cada operación ambos operandos deben tienen lugar dentro de una expresión, pues en cada operación ambos operandos deben de ser del mismo tipo. Si la conversión es del tipo implícito se efectúa el siguiente de ser del mismo tipo. Si la conversión es del tipo implícito se efectúa el siguiente algoritmo en dicho orden:algoritmo en dicho orden:

Si un operando es Si un operando es decimaldecimal, el otro operando se transforma a , el otro operando se transforma a decimaldecimal. . Si un operando es Si un operando es doubledouble, el otro operando se transforma a , el otro operando se transforma a doubledouble. . Si un operando es Si un operando es floatfloat, el otro operando se transforma a , el otro operando se transforma a floatfloat. . Si un operando es Si un operando es ulongulong, el otro operando se transforma a , el otro operando se transforma a ulongulong. . Si un operando es Si un operando es longlong, el otro operando se transforma a , el otro operando se transforma a longlong. . Si un operando es Si un operando es uintuint, y si el otro operando es de tipo , y si el otro operando es de tipo sbytesbyte, , shortshort o o intint, los dos se , los dos se

transforman a transforman a longlong. . Si un operando es Si un operando es uintuint, el otro operando se transforma a , el otro operando se transforma a uintuint. . Si ninguno de los casos anteriores, los dos operandos se transforman a Si ninguno de los casos anteriores, los dos operandos se transforman a intint. .

Page 12: Presentación de c #

Constantes :Constantes :

Las constantes como su nombre lo indica son variables cuyo Las constantes como su nombre lo indica son variables cuyo valor no puede ser alterado. Éstas se utilizan para definir valor no puede ser alterado. Éstas se utilizan para definir valores que no cambian con el tiempo. Por ejemplo valores que no cambian con el tiempo. Por ejemplo podemos definir una constante para especificar cuantos podemos definir una constante para especificar cuantos segundos hay en una hora de la siguiente forma:segundos hay en una hora de la siguiente forma:

constconst int int segPorHora segPorHora = = 36003600; ; Indica que es constante Indica que es constante tipo de variable tipo de variable Identificador o Identificador o

NombreNombre = = Valor de la constanteValor de la constanteEsta constante no podrá ser cambiada a lo largo de nuestro Esta constante no podrá ser cambiada a lo largo de nuestro

programa. En el caso de que queramos asignarle otro programa. En el caso de que queramos asignarle otro valor, el compilador nos dará un error.valor, el compilador nos dará un error.

Las constantes deben ser inicializadas en el momento de su Las constantes deben ser inicializadas en el momento de su creación.creación.

Page 13: Presentación de c #

Clasificación de operadores:Clasificación de operadores:

C♯ tiene cuatro clases generales de operadores: C♯ tiene cuatro clases generales de operadores: aritméticosaritméticos, , a nivel de BITa nivel de BIT, , relacionalesrelacionales y y lógicoslógicos..

--------------VER IMAGEN--------CLICKEA OTRA VEZ PARA SACARLA----------------------------VER IMAGEN--------CLICKEA OTRA VEZ PARA SACARLA--------------

Los operadores aritméticos funcionan igual que en C y C++. Los operadores aritméticos funcionan igual que en C y C++. El resultado de los operadores relacionales y lógicos es un valor El resultado de los operadores relacionales y lógicos es un valor boolbool. . Los operadores de cortocircuito evalúan el segundo operando solo cuando es Los operadores de cortocircuito evalúan el segundo operando solo cuando es

necesario. necesario. Los operadores a nivel de BIT no se pueden aplicar a tipos Los operadores a nivel de BIT no se pueden aplicar a tipos boolbool, , floatfloat, , doubledouble

o o decimaldecimal. .

Page 14: Presentación de c #

Operadores Matemáticos :Operadores Matemáticos :

Casi todos los lenguajes de programación Casi todos los lenguajes de programación soportan operadores matemáticos. Estos soportan operadores matemáticos. Estos operadores se utilizan para realizar operadores se utilizan para realizar operaciones matemáticas sencillas entre operaciones matemáticas sencillas entre números. Entre estos operadores tenemos números. Entre estos operadores tenemos los de suma, resta, multiplicación, división y los de suma, resta, multiplicación, división y módulo (o residuo): +,-,*,/,%módulo (o residuo): +,-,*,/,%

Page 15: Presentación de c #

Operadores de Asignación :Operadores de Asignación :Los operadores de asignación son aquellos que sirven para asignar el valor del Los operadores de asignación son aquellos que sirven para asignar el valor del

objeto o variable de la derecha al objeto o variable de la izquierda. Un ejemplo objeto o variable de la derecha al objeto o variable de la izquierda. Un ejemplo sencillo de este tipo de operadores es la inicialización de variables. Como sencillo de este tipo de operadores es la inicialización de variables. Como habíamos visto, para asignar el valor a una variable simplemente utilizamos el habíamos visto, para asignar el valor a una variable simplemente utilizamos el símbolo (u operador) igual =símbolo (u operador) igual =

int a = 15; //la variable a tomará el valor de 15. int a = 15; //la variable a tomará el valor de 15. int b = a = 10; //la variable a y la variable b tomarán el valor de 10. int b = a = 10; //la variable a y la variable b tomarán el valor de 10.

Además de estos operadores de asignación sencillos, existen otros operadores de Además de estos operadores de asignación sencillos, existen otros operadores de asignación que realizan operaciones matemáticas antes de asignar el valor a asignación que realizan operaciones matemáticas antes de asignar el valor a la variable u objeto. Entre ellos tenemos: +=, -=, *=, /=, %=, ++, --. la variable u objeto. Entre ellos tenemos: +=, -=, *=, /=, %=, ++, --.

Ejemplos:Ejemplos:

var += 10; // realiza la operación var = var+10; var += 10; // realiza la operación var = var+10; var -= 10; // realiza la operación var = var-10; var -= 10; // realiza la operación var = var-10; var *= 10; // realiza la operación var = var*10; var *= 10; // realiza la operación var = var*10; var /= 10; // realiza la operación var = var/10; var /= 10; // realiza la operación var = var/10; var++; //realiza la operación var = var+1; después de procesar esta línea var++; //realiza la operación var = var+1; después de procesar esta línea ++var; //realiza la operación var = var+1; antes de procesar esta línea var--; ++var; //realiza la operación var = var+1; antes de procesar esta línea var--; //realiza la operación var = var-1; después de procesar esta línea --var; //realiza la operación var = var-1; después de procesar esta línea --var; //realiza la operación var = var-1; antes de procesar esta línea//realiza la operación var = var-1; antes de procesar esta línea

Page 16: Presentación de c #

Operadores de Comparación :Operadores de Comparación :

Estos operadores son muy útiles cuando tenemos que cambiar el flujo de nuestro Estos operadores son muy útiles cuando tenemos que cambiar el flujo de nuestro programa. Con ellos podemos comparar si un objeto o variable es igual (==), programa. Con ellos podemos comparar si un objeto o variable es igual (==), no es igual (!=), es mayor o igual (>=), es menor o igual (<=), es mayor (>) o es no es igual (!=), es mayor o igual (>=), es menor o igual (<=), es mayor (>) o es menor (<) que otro objeto. El resultado de esta comparación es de tipo bool es menor (<) que otro objeto. El resultado de esta comparación es de tipo bool es decir verdadero o falso (true o false). Estos operadores se los usa de la decir verdadero o falso (true o false). Estos operadores se los usa de la siguiente forma:siguiente forma:

int a = 10; int a = 10; int b = 20; int b = 20; bool resp; bool resp; resp = (a == b); // compara si a es igual a b y retorna el valor bool false (o resp = (a == b); // compara si a es igual a b y retorna el valor bool false (o falso), tómese en cuenta que a==b es MUY diferente a a=b falso), tómese en cuenta que a==b es MUY diferente a a=b resp = (a != b); // compara si a es diferente a b y retorna el valor bool true (o resp = (a != b); // compara si a es diferente a b y retorna el valor bool true (o verdadero) verdadero) resp = (a <= b); // compara si a es menor o igual a b y retorna el valor bool true resp = (a <= b); // compara si a es menor o igual a b y retorna el valor bool true (o verdadero) (o verdadero) resp = (a >= b); // compara si a es mayor o igual a b y retorna el valor bool resp = (a >= b); // compara si a es mayor o igual a b y retorna el valor bool false (o falso) resp = (a < b); // compara si a es menor a b y retorna el valor false (o falso) resp = (a < b); // compara si a es menor a b y retorna el valor bool true (o verdadero) resp = (a > b); // compara si a es mayor a b y retorna el bool true (o verdadero) resp = (a > b); // compara si a es mayor a b y retorna el valor bool false (o falso) valor bool false (o falso)

Page 17: Presentación de c #

Operadores Lógicos :Operadores Lógicos :Para manipular esta información en unos y ceros, el ordenador tiene operadores lógicos los cuales Para manipular esta información en unos y ceros, el ordenador tiene operadores lógicos los cuales

permiten cambiar la información de una manera que nos convenga. Por medio de estos operadores permiten cambiar la información de una manera que nos convenga. Por medio de estos operadores lógicos el ordenador es capaz de tomar decisiones, procesar cualquier información, hacer lógicos el ordenador es capaz de tomar decisiones, procesar cualquier información, hacer complicadas operaciones matemáticas, o en otras palabras, por medio de estos operadores lógicos, complicadas operaciones matemáticas, o en otras palabras, por medio de estos operadores lógicos, el ordenador hace todo lo que vosotros le habéis visto hacer.el ordenador hace todo lo que vosotros le habéis visto hacer.

Los operadores lógicos más importantes para nuestro estudio en C# son:Los operadores lógicos más importantes para nuestro estudio en C# son:ANDANDRepresentado por el símbolo Representado por el símbolo &&. Comprueba si todos los números binarios son 1 (o verdadero) . Comprueba si todos los números binarios son 1 (o verdadero) entonces la respuesta es 1 (o verdadero)entonces la respuesta es 1 (o verdadero)ORORRepresentado por el símbolo Representado por el símbolo || (barra vertical de la tecla del 1). Comprueba si cualquiera de los (barra vertical de la tecla del 1). Comprueba si cualquiera de los números binarios es 1 (o verdadero) entonces la respuesta es 1 (o verdadero)números binarios es 1 (o verdadero) entonces la respuesta es 1 (o verdadero)NOTNOTRepresentado por el símbolo ~ y !. Invierte la respuesta. En operaciones con tipos bool, el operador! Representado por el símbolo ~ y !. Invierte la respuesta. En operaciones con tipos bool, el operador! cambia la variable de verdadero a falso o viceversa, pero en números binarios, el operador ~ cambia cambia la variable de verdadero a falso o viceversa, pero en números binarios, el operador ~ cambia cada uno de los unos y ceros por su opuesto, cuando encuentra un uno lo cambia por un cero y cada uno de los unos y ceros por su opuesto, cuando encuentra un uno lo cambia por un cero y viceversa, así por ejemplo si tenemos el numero binario 01000001 y aplicamos el operador NOT ~ viceversa, así por ejemplo si tenemos el numero binario 01000001 y aplicamos el operador NOT ~ obtendremos 10111110, pero si tenemos una expresión que se evalúa como obtendremos 10111110, pero si tenemos una expresión que se evalúa como truetrue (o verdadera) y si (o verdadera) y si se aplica el operador!, se obtiene una respuesta false (o falsa). Por ejemplo (!(10==10)) esta se aplica el operador!, se obtiene una respuesta false (o falsa). Por ejemplo (!(10==10)) esta expresión tiene como resultado falseexpresión tiene como resultado falseXORXORRepresentado por el símbolos ^. En dos números, comprueba si los dos números binarios son Representado por el símbolos ^. En dos números, comprueba si los dos números binarios son iguales, entonces la respuesta es 0 (o falso).iguales, entonces la respuesta es 0 (o falso).<<<<Desplazar a la izquierda desplaza todos los bits hacia la izquierda introduciendo ceros al final de la Desplazar a la izquierda desplaza todos los bits hacia la izquierda introduciendo ceros al final de la derecha y descartando los últimos números. Así el número 01000001 si se lo desplaza a la izquierda derecha y descartando los últimos números. Así el número 01000001 si se lo desplaza a la izquierda una vez 01000001 << 1, se convierte en 10000010una vez 01000001 << 1, se convierte en 10000010>>>>Al igual que el operador anterior, desplazar a la derecha desplaza todos los bits hacia la derecha Al igual que el operador anterior, desplazar a la derecha desplaza todos los bits hacia la derecha introduciendo ceros al final de la izquierda y descartando los últimos números. Así el número introduciendo ceros al final de la izquierda y descartando los últimos números. Así el número 01000001 si se lo desplaza a la derecha una vez 01000001 >> 1, se convierte en 0010000001000001 si se lo desplaza a la derecha una vez 01000001 >> 1, se convierte en 00100000

Page 18: Presentación de c #

Operadores Lógicos de Unión :Operadores Lógicos de Unión :En el caso de que deseemos comparar varios valores para saber si todos son En el caso de que deseemos comparar varios valores para saber si todos son

verdaderos o si alguno es verdadero podemos usar los operadores lógicos de verdaderos o si alguno es verdadero podemos usar los operadores lógicos de unión && y ||unión && y ||

a && b // esta línea compara si a a && b // esta línea compara si a yy b son verdaderos retorna el valor true (o b son verdaderos retorna el valor true (o verdadero) si los dos lo son verdadero) si los dos lo son a || b // esta línea compara si a a || b // esta línea compara si a oo b son verdaderos retorna el valor true (o b son verdaderos retorna el valor true (o verdadero) si alguno de los dos es verdadero) si alguno de los dos es !a // esta línea compara si a es verdadero retorna falso si lo es y viceversa. !a // esta línea compara si a es verdadero retorna falso si lo es y viceversa.

a y b pueden representar variables, constantes, números, funciones, expresiones, a y b pueden representar variables, constantes, números, funciones, expresiones, etc. que den como resultado un valor de decisión (true o false). Así por etc. que den como resultado un valor de decisión (true o false). Así por ejemplo, el siguiente ejemplo es válido:ejemplo, el siguiente ejemplo es válido:

int a = 0; int a = 0; int b = 10; int b = 10; int c = 20; int c = 20; if ((a <= b) && (c >= b)) if ((a <= b) && (c >= b)) Console.WriteLine ("a es menor o igual a b y c es mayor o igual a b"); Console.WriteLine ("a es menor o igual a b y c es mayor o igual a b");

Page 19: Presentación de c #

ControlesControles

Hay dos maneras de cambiar el rumbo de Hay dos maneras de cambiar el rumbo de ejecución de un programa, estos pueden ejecución de un programa, estos pueden ser saltos incondicionales y saltos ser saltos incondicionales y saltos condicionales. A continuación se describen condicionales. A continuación se describen algunas de estas sentencias. Algunas son algunas de estas sentencias. Algunas son muy similares a las existentes en otros muy similares a las existentes en otros lenguajes, como las sentencias if, for, while, lenguajes, como las sentencias if, for, while, etc. y otras, como foreach, throw o continue, etc. y otras, como foreach, throw o continue, son algo más específicas. son algo más específicas.

Page 20: Presentación de c #

Saltos Incondicionales :Saltos Incondicionales :Las instrucciones de un programa se ejecutan sentencia por sentencia empezando desde el Las instrucciones de un programa se ejecutan sentencia por sentencia empezando desde el

método o función principal llamado Main() hasta terminar con el programa. El programa método o función principal llamado Main() hasta terminar con el programa. El programa sin embargo, tomará otros rumbos incondicionalmente en dos oportunidades: 1. Cuando sin embargo, tomará otros rumbos incondicionalmente en dos oportunidades: 1. Cuando encuentre la llamada a otros métodos y 2. Con el uso de las palabras claves como goto, encuentre la llamada a otros métodos y 2. Con el uso de las palabras claves como goto, break, continue, return y throw las cuales se discutirán más adelante. break, continue, return y throw las cuales se discutirán más adelante.

Llamadas a otros métodos:Llamadas a otros métodos: el programa ejecuta sentencia por sentencia el método principal el programa ejecuta sentencia por sentencia el método principal Main() hasta que encuentra la llamada a otro método. Después de que el método Main() hasta que encuentra la llamada a otro método. Después de que el método llamado haya terminado el método Main continuará con la ejecución de las sentencias llamado haya terminado el método Main continuará con la ejecución de las sentencias restantes. restantes.

La sentencia La sentencia goto:goto:En los inicios de los lenguajes de programación la sentencia goto fue la más popular para ir En los inicios de los lenguajes de programación la sentencia goto fue la más popular para ir

de un lugar a otro dentro del programa. Sin embargo esto creaba una tremenda de un lugar a otro dentro del programa. Sin embargo esto creaba una tremenda confusión al momento de diseñar la aplicación. Si el programador quería hacer un confusión al momento de diseñar la aplicación. Si el programador quería hacer un esquema de como funcionaba dicha aplicación, se veía con un laberinto tipo espagueti esquema de como funcionaba dicha aplicación, se veía con un laberinto tipo espagueti de líneas y símbolos conectados entre si. Es por esto que esta sentencia es un poco de líneas y símbolos conectados entre si. Es por esto que esta sentencia es un poco "problemática" y fuera de "moda" entre los lenguajes de programación modernos. C# sin "problemática" y fuera de "moda" entre los lenguajes de programación modernos. C# sin embargo soporta esta sentencia. Os recomendamos no utilizarla a menos que sea embargo soporta esta sentencia. Os recomendamos no utilizarla a menos que sea necesario o si os sentís cómodos haciéndolo, pero cuando os cree un laberinto difícil de necesario o si os sentís cómodos haciéndolo, pero cuando os cree un laberinto difícil de depurar, no digáis que no os advertimos de no utilizarla. Hay muchas otras mejores depurar, no digáis que no os advertimos de no utilizarla. Hay muchas otras mejores maneras de cumplir con el mismo propósito (la sentencia while por ejemplo es una de maneras de cumplir con el mismo propósito (la sentencia while por ejemplo es una de ellas), las cuales son más elegantes y más sencillas de depurar.ellas), las cuales son más elegantes y más sencillas de depurar.

La sentencia goto funciona de la siguiente manera:La sentencia goto funciona de la siguiente manera:Primero se crea una etiqueta al inicio de cierto bloque de código y después en otro lugar Primero se crea una etiqueta al inicio de cierto bloque de código y después en otro lugar podemos saltar hacia esa etiqueta usando la palabra clave goto.podemos saltar hacia esa etiqueta usando la palabra clave goto.

Page 21: Presentación de c #

Saltos Condicionales :Saltos Condicionales :Los saltos condicionales sirven para ejecutar cierto código solamente si Los saltos condicionales sirven para ejecutar cierto código solamente si

se cumple con alguna condición. Entre otros tenemos: se cumple con alguna condición. Entre otros tenemos:

Instrucción IF :Instrucción IF :Esta sentencia sirve para ejecutar unas instrucciones en caso de que se cumpla Esta sentencia sirve para ejecutar unas instrucciones en caso de que se cumpla

determinada condición. La forma completa de la instrucción if es :determinada condición. La forma completa de la instrucción if es :

If ( condición ) If ( condición )

{ instrucciones; ... } { instrucciones; ... }

else else

{ instrucciones; ... } { instrucciones; ... }

donde la cláusula else es opcional. donde la cláusula else es opcional.

Si la condición es verdadera, se ejecutarán las instrucciones dentro del bloque if, mientras Si la condición es verdadera, se ejecutarán las instrucciones dentro del bloque if, mientras que si es falsa, se ejecutará el bloque else. El valor que controla la sentencia if debe ser que si es falsa, se ejecutará el bloque else. El valor que controla la sentencia if debe ser de tipo bool.de tipo bool.

Las instrucciones condicionales se evalúan de arriba a abajo. Tan pronto como se encuentra Las instrucciones condicionales se evalúan de arriba a abajo. Tan pronto como se encuentra una condición true, se ejecuta la instrucción asociada con ella, y el resto de la escalera una condición true, se ejecuta la instrucción asociada con ella, y el resto de la escalera se omite. Si ninguna de las condiciones es true, se ejecutará la última instrucción else. se omite. Si ninguna de las condiciones es true, se ejecutará la última instrucción else. La última instrucción else actúa como condición predeterminada, es decir, si no funciona La última instrucción else actúa como condición predeterminada, es decir, si no funciona ninguna de las otras pruebas condicionales, se realiza esta última instrucción. Si no ninguna de las otras pruebas condicionales, se realiza esta última instrucción. Si no existe esta instrucción else final y el resto de de las condiciones son falsas, entonces no existe esta instrucción else final y el resto de de las condiciones son falsas, entonces no se realizará ninguna acción. se realizará ninguna acción.

Page 22: Presentación de c #

Instrucción Switch :Instrucción Switch :La instrucción switch es muy parecida a la estructura if-else-if, sólo que permite La instrucción switch es muy parecida a la estructura if-else-if, sólo que permite

seleccionar entre varias alternativas de una manera más cómoda. Funciona de seleccionar entre varias alternativas de una manera más cómoda. Funciona de la siguiente manera: el valor de una expresión se prueba sucesivamente con la siguiente manera: el valor de una expresión se prueba sucesivamente con una lista de constantes. Cuando se encuentra una coincidencia, se ejecuta la una lista de constantes. Cuando se encuentra una coincidencia, se ejecuta la secuencia de instrucciones asociada con esa coincidencia. La forma general secuencia de instrucciones asociada con esa coincidencia. La forma general de la instrucción switch es la siguiente:de la instrucción switch es la siguiente:

switch( expresión )switch( expresión ){ {

case constante1: case constante1: instrucciones; instrucciones; break; <- Esto es obligatorio poner para detener el caso y pasar al break; <- Esto es obligatorio poner para detener el caso y pasar al

otro.otro.case constante2: case constante2:

instrucciones; instrucciones; break; break; <- En lugar de un break también se puede poner un goto para ir a otra <- En lugar de un break también se puede poner un goto para ir a otra

sentencia.sentencia.

... ... default: default:

instrucciones; instrucciones; break; break;

} } La sentencia default se ejecutará sólo si ninguna constante de las que siguen a La sentencia default se ejecutará sólo si ninguna constante de las que siguen a

case coincide con expresión. Es algo similar al else final de la instrucción if-case coincide con expresión. Es algo similar al else final de la instrucción if-else-if.else-if.

Page 23: Presentación de c #

Bucle For :Bucle For :El bucle for de C# es idéntico al encontrado en los lenguajes El bucle for de C# es idéntico al encontrado en los lenguajes

C/C++ y Java. El formato general esC/C++ y Java. El formato general esfor( inicialización; condición; iteración ) for( inicialización; condición; iteración ) { {

instrucciones; instrucciones; } } Las sentencias de inicialización se ejecutan una vez al Las sentencias de inicialización se ejecutan una vez al

principio y sirven principalmente para asignar valores a las principio y sirven principalmente para asignar valores a las variables que servirán de contador. Las sentencias de variables que servirán de contador. Las sentencias de condición, por su parte, se ejecutan cada vez que el bucle condición, por su parte, se ejecutan cada vez que el bucle vuelve al principio y sirven para controlar el bucle: éste vuelve al principio y sirven para controlar el bucle: éste seguirá realizándose siempre y cuando estas condiciones seguirá realizándose siempre y cuando estas condiciones sean true. Las sentencias de iteración se ejecutan también sean true. Las sentencias de iteración se ejecutan también cada vez que se realiza una nuevo ciclo en el bucle, y cada vez que se realiza una nuevo ciclo en el bucle, y sirven para cambiar el estado de las variables que sirven para cambiar el estado de las variables que gobiernan las sentencias de condición.gobiernan las sentencias de condición.

Page 24: Presentación de c #

Bucle While :Bucle While :El bucle while es un bucle que se realiza mientras se cumpla El bucle while es un bucle que se realiza mientras se cumpla

determinada condición. Tiene la formadeterminada condición. Tiene la formawhile( condición )while( condición ){{

instrucciones;instrucciones;}}Donde la condición tiene que ser un valor booleano.Donde la condición tiene que ser un valor booleano.Acá un ejemplo:Acá un ejemplo:int i = 0; <- da un valor inicial a la variable entera llamada iint i = 0; <- da un valor inicial a la variable entera llamada iwhile( i<10) while( i<10) <- realiza las siguientes instrucciones mientras i sea menor a 10<- realiza las siguientes instrucciones mientras i sea menor a 10

{{Console.WriteLine( i ); <- muestra iConsole.WriteLine( i ); <- muestra ii = i+1; <- aumenta i en 1i = i+1; <- aumenta i en 1

}}

Page 25: Presentación de c #

Bucle Do-While :Bucle Do-While :Se trata de una ligera variante del bucle anterior, con la diferencia de que ahora Se trata de una ligera variante del bucle anterior, con la diferencia de que ahora

primero se ejecutan las instrucciones y luego se evalúa la condición, de forma primero se ejecutan las instrucciones y luego se evalúa la condición, de forma que tiene tiene una estructura:que tiene tiene una estructura:

Do <- declara el comienzo del bucleDo <- declara el comienzo del bucle{ {

instrucciones; <- se ejecutan antes de compararinstrucciones; <- se ejecutan antes de comparar} while( condición ); <- si al finalizar las instrucciones el resultado de la condición } while( condición ); <- si al finalizar las instrucciones el resultado de la condición

es true termina el bucle, sino vuelve a hacer las instrucciones.es true termina el bucle, sino vuelve a hacer las instrucciones.

Bucle Foreach :Bucle Foreach :El bucle foreach se utiliza para hacer iteraciones sobre elementos de una colección, como pueden ser los enteros dentro de un arreglo de enteros. La sintaxis sigue la siguiente estructura:foreach( tipo in colección ) {

instrucciones; } Como hemos comentado, el uso más inmediato es iterar sobre un arreglo de números:int[,] arr = {{1,2},{2,3}}; foreach( int elem in arr ) { Console.WriteLine( elem ); } Este ejemplo sólo imprime los valores de una matriz, pero como se puede comprobar mejora mucho la claridad del código comparándolo con una implementación con bucles for.

Page 26: Presentación de c #

Continue y Break :Continue y Break :continuecontinue y y breakbreak son dos palabras clave que nos permiten saltar son dos palabras clave que nos permiten saltar

incondicionalmente al inicio de un bucle (continue) o fuera de un bucle incondicionalmente al inicio de un bucle (continue) o fuera de un bucle (break) cuando se necesite. Por ejemplo:(break) cuando se necesite. Por ejemplo:

for(int i = 0; i<10; i++ ) for(int i = 0; i<10; i++ ) { {

if (i==5) if (i==5) continue; continue;

if (i==9) if (i==9) break; break;

Console.Write("{0},",i); Console.Write("{0},",i); }}Este pequeño programa entrará en un bucle Este pequeño programa entrará en un bucle forfor que hará que la variable que hará que la variable ii

tome los valores del 1 al 10, pero al llegar al número 5 el bucle saltará tome los valores del 1 al 10, pero al llegar al número 5 el bucle saltará incondicionalmente al inicio del bucle sin ejecutar las líneas que incondicionalmente al inicio del bucle sin ejecutar las líneas que siguen más adelante por lo que no ejecutará la línea que imprime en la siguen más adelante por lo que no ejecutará la línea que imprime en la pantalla el número 5. Cosa similar sucede cuando llega al número 9: el pantalla el número 5. Cosa similar sucede cuando llega al número 9: el bucle será detenido por el salto incondicional break que romperá el bucle será detenido por el salto incondicional break que romperá el bucle cuando encuentre esta palabra. El resultado será el siguiente:bucle cuando encuentre esta palabra. El resultado será el siguiente:

{ 0,1,2,3,4,6,7,8 }{ 0,1,2,3,4,6,7,8 }

Page 27: Presentación de c #

Varios puntos a tener en cuenta en C♯ con respecto a clases y objetos son los siguientes:

Una variable de objeto de cierta clase no almacena los valores del objeto sino su referencia (al igual que Java).

El operador de asignación no copia los valores de un objeto, sino su referencia a él (al igual que Java).

Un constructor tiene el mismo nombre que su clase y es sintácticamente similar a un método.

Un constructor no devuelve ningún valor. Al igual que los métodos, los constructores también pueden ser sobrecargados. Si no se especifica un constructor en una clase, se usa uno por defecto que consiste en

asignar a todas las variables el valor de 0, null o false según corresponda. Para crear un nuevo objeto se utiliza la siguiente sintaxis: variable = new

nombre_clase();. Un destructor se declara como un constructor, aunque va precedido por un signo de tilde

~. Se emplea una desasignación de memoria de objetos no referenciados (recolección de

basura), y cuando esto ocurre se ejecuta el destructor de dicha clase. El destructor de una clase no se llama cuando un objeto sale del ámbito. Todos los destructores se llamarán antes de que finalice un programa. La palabra clave this es un apuntador al mismo objeto en el cual se usa. La palabra clave static hace que un miembro pertenezca a una clase en vez de

pertenecer a objetos de dicha clase. Se puede tener acceso a dicho miembro antes de que se cree cualquier objeto de su clase y sin referencias a un objeto.

Un método static no tiene una referencia this. Un método static puede llamar sólo a otros métodos static. Un método static sólo debe tener acceso directamente a datos static. Un constructor static se usa para inicializar atributos que se aplican a una clase en lugar

de aplicarse a una instancia. C♯ permite la sobrecarga de operadores con la palabra clave operator

Page 28: Presentación de c #

Clases en C #Clases en C #

Como hemos dicho, C# es un lenguaje orientado a objetos. A Como hemos dicho, C# es un lenguaje orientado a objetos. A diferencia de lenguajes como C++ o Python en los que la diferencia de lenguajes como C++ o Python en los que la orientación a objetos es opcional, en C# y al igual que en orientación a objetos es opcional, en C# y al igual que en Java, la orientación a objetos es ineludible, de hecho Java, la orientación a objetos es ineludible, de hecho cualquier método o variable está contenida dentro de un cualquier método o variable está contenida dentro de un objeto. Y el concepto fundamental en torno a la orientación objeto. Y el concepto fundamental en torno a la orientación a objetos es la clase.a objetos es la clase.

Una clase es como una plantilla que describe cómo deben Una clase es como una plantilla que describe cómo deben ser las instancias de dicha clase, de forma que cuando ser las instancias de dicha clase, de forma que cuando creamos una instancia, ésta tendrá exactamente los creamos una instancia, ésta tendrá exactamente los mismos métodos y variables que los que tiene la clase. mismos métodos y variables que los que tiene la clase. Los datos y métodos contenidos en una clase se llaman Los datos y métodos contenidos en una clase se llaman miembros de la clase y se accede a ellos siempre miembros de la clase y se accede a ellos siempre mediante el operador "." mediante el operador "."

Page 29: Presentación de c #

MétodosMétodosLos métodos, también llamados funciones, son trozos de código que reciben unos datos, Los métodos, también llamados funciones, son trozos de código que reciben unos datos,

hacen algo con esos datos, y a veces devuelven algún valor. En C#, todos los métodos hacen algo con esos datos, y a veces devuelven algún valor. En C#, todos los métodos se encuentran contenidas dentro de un objeto.se encuentran contenidas dentro de un objeto.

La estructura mínima de un método tiene las siguientes partes:La estructura mínima de un método tiene las siguientes partes: Tipo devuelto Tipo devuelto Nombre del método Nombre del método Parámetros (puede ser vacío)Parámetros (puede ser vacío) Cuerpo del método Cuerpo del método de forma que el siguiente método:de forma que el siguiente método:double Divide( double a, double b ) double Divide( double a, double b ) {{ return a/b; return a/b; } } devuelve un tipo double, tiene por nombre Divide, los parámetos son a y b, ambos del tipo devuelve un tipo double, tiene por nombre Divide, los parámetos son a y b, ambos del tipo

double, y el cuerpo del método es simplemente "return a/b;".double, y el cuerpo del método es simplemente "return a/b;".Cuando queramos llamar a un método, debemos simplemente poner el nombre del método Cuando queramos llamar a un método, debemos simplemente poner el nombre del método

y sus argumentos dentro de un paréntesis separados por comas. Para llamar al método y sus argumentos dentro de un paréntesis separados por comas. Para llamar al método Divide declarado antes, simplemente debemos escribir Divide(8, 2);Divide declarado antes, simplemente debemos escribir Divide(8, 2);

Según lo que hemos visto, el ejemplo del método Divide() completo necesita tener una clase Según lo que hemos visto, el ejemplo del método Divide() completo necesita tener una clase donde definirse y un método Main() donde ejecutarse. donde definirse y un método Main() donde ejecutarse.

Page 30: Presentación de c #

Parámetros Parámetros La declaración formal de parámetros también define variables. Hay cuatro tipos de parámetros: La declaración formal de parámetros también define variables. Hay cuatro tipos de parámetros:

parámetros por valor, por referencia, parámetros de salida, y arreglos de parámetros.parámetros por valor, por referencia, parámetros de salida, y arreglos de parámetros.

Paso por valorPaso por valorEl paso de parámetros por valor es usado por defecto para pasar parámetros a métodos. Cuando se El paso de parámetros por valor es usado por defecto para pasar parámetros a métodos. Cuando se

pasa un parámetro por valor a una función realmente se está pasando una copia de dicho pasa un parámetro por valor a una función realmente se está pasando una copia de dicho parámetro, por lo que las modificaciones que le hagamos al parámetro dentro del método no parámetro, por lo que las modificaciones que le hagamos al parámetro dentro del método no afectarán al parámetro original. El ejemploafectarán al parámetro original. El ejemplo

static void F(int p) static void F(int p) { { p++; p++; Console.WriteLine("p = {0}", p); Console.WriteLine("p = {0}", p); } } static void Main() static void Main() { { int a = 1; int a = 1; Console.WriteLine("pre: a = {0}", a); Console.WriteLine("pre: a = {0}", a); F(a); F(a); Console.WriteLine("post: a = {0}", a); Console.WriteLine("post: a = {0}", a); } } muestra un método F que tiene un parámetro por valor llamado p. El ejemplo produce la salida:muestra un método F que tiene un parámetro por valor llamado p. El ejemplo produce la salida:pre: a = 1 pre: a = 1 p = 2 p = 2 post: a = 1 post: a = 1 aunque el valor del parámetro aunque el valor del parámetro pp haya sido modificado dentro del método, éste parámetro solamente haya sido modificado dentro del método, éste parámetro solamente

tenía una copia del valor del parámetro tenía una copia del valor del parámetro aa que pasamos al método; por lo que cuando imprimimos el que pasamos al método; por lo que cuando imprimimos el parámetro parámetro aa vemos que éste parámetro ha mantenido su valor original. vemos que éste parámetro ha mantenido su valor original.

Page 31: Presentación de c #

Paso por referenciaPaso por referenciaEl paso de parámetros por referencia es la contraposición lógica al paso por valor. El paso de parámetros por referencia es la contraposición lógica al paso por valor.

En el paso por referencia no se realiza ninguna copia del objeto, sino que lo En el paso por referencia no se realiza ninguna copia del objeto, sino que lo que se le pasa a la función es una referencia del objeto, de forma que el que se le pasa a la función es una referencia del objeto, de forma que el parámetro pasa directamente a la función y cualquier modificación sobre el parámetro pasa directamente a la función y cualquier modificación sobre el parámetro dentro de la función afectará al parámetro originalparámetro dentro de la función afectará al parámetro original

static void Swap(ref int a, ref int b) { // intercambia los dos valores static void Swap(ref int a, ref int b) { // intercambia los dos valores int t = a; int t = a; a = b; a = b; b = t; b = t; } } static void Main() { static void Main() { int x = 1; int x = 1; int y = 2; int y = 2; Console.WriteLine("pre: x = {0}, y = {1}", x, y); Console.WriteLine("pre: x = {0}, y = {1}", x, y); Swap(ref x, ref y); Swap(ref x, ref y); Console.WriteLine("post: x = {0}, y = {1}", x, y); Console.WriteLine("post: x = {0}, y = {1}", x, y); }}muestra un método swap que tiene dos parámetros por referencia. La salida muestra un método swap que tiene dos parámetros por referencia. La salida

producida es:producida es: pre: x = 1, y = 2 pre: x = 1, y = 2 post: x = 2, y = 1 post: x = 2, y = 1 La palabra clave La palabra clave refref debe de ser usada tanto en la declaración formal de la debe de ser usada tanto en la declaración formal de la

función como en los usos que se hace de ésta.función como en los usos que se hace de ésta.

Page 32: Presentación de c #

Parámetro de salidaParámetro de salidaEl parámetro de salida es similar al parámetro por referencia, salvo que el El parámetro de salida es similar al parámetro por referencia, salvo que el

valor inicial de dicho argumento carece de importancia. Un argumento valor inicial de dicho argumento carece de importancia. Un argumento de salida se declara con el modificador out. El ejemplode salida se declara con el modificador out. El ejemplo

static void Divide(int num1, int num2, out int result, out int resid) static void Divide(int num1, int num2, out int result, out int resid) { result = num1 / num2; { result = num1 / num2; resid = num1 % num2; } resid = num1 % num2; } static void Main() static void Main() { int valor1 = 10, valor2 = 3, respuesta, residuo;{ int valor1 = 10, valor2 = 3, respuesta, residuo;Divide(valor1, valor2, out respuesta, out residuo); Divide(valor1, valor2, out respuesta, out residuo); Console.WriteLine("La división de {0} para {1} = {2} con un residuo de Console.WriteLine("La división de {0} para {1} = {2} con un residuo de

{3}", valor1, valor2, respuesta, residuo); {3}", valor1, valor2, respuesta, residuo); }}muestra un método Divide que incluye dos parámetros de salida. Uno muestra un método Divide que incluye dos parámetros de salida. Uno

para el resultado (variable result) de la división y otro para el resto para el resultado (variable result) de la división y otro para el resto (variable resid). Vemos que estos resultados son asignados a las (variable resid). Vemos que estos resultados son asignados a las variables variables respuestarespuesta y y residuoresiduo respectivamente. respectivamente.