Está en la página 1de 35

ELEMENTO DE COMPETENCIA 3

MANEJO DEL LENGUAJE DE PROGRAMACIN C#

Tutor:
JOSE OMAR MAYORGA

UNIVERSIDAD DEL TOLIMA


FACULTAD DE TECNOLOGIA EN GESTION DE BASES DE DATOS

IBAGUE
2016

INTRODUCCION
El segundo elemento de competencia hace referencia al desarrollo de interfaces con
XAML, Este lenguaje declarativo es aplicado en el modelo de programacin.NET
Framework tambin es utilizado por diversas tecnologas como la vista en el elemento
de competencia 1, es decir, Windows Presentation Fundation (Fundacin de
presentacin de Windows) (WPF).
Se puede afirmar que los avances diarios que sufre la tecnologa son mayores y visto
desde la perspectiva el lenguaje XAML para lograr interfaces de usuario demanda
independencia en los dispositivos, y la utilizacin en su entorno
Los lenguajes dinmicos proporcionan interfaces amigables con el usuario que
facilitan su utilizacin y entre estos lenguajes est el XAM (Extensible Aplicacin
Markup Language) Lenguaje marcado o de marcacin de aplicaciones extensibles.

Estructura del lenguaje


Clases de uso comn
Sentencias, operadores y tipos

OBJETIVOS
OBJETIVO GENERAL
Conocer el lenguaje declarativo aplicado al modelo de programacin.NET llamado
XAML y aplicarlo para el desarrollo de aplicaciones con la tecnologa (WPF).
.
OBJETIVOS ESPECIFICOS

Comprender los elementos basicos de los controles respectivos para

crear

interfaces de usuario final basado en XAML en una aplicacin determinada.

Usar una amplia variedad de controles que se pueden utilizar en las interfaces de
usuario de una aplicacin, que permiten de manera fcil su manejo y aumentan su
versatilidad.

Brindar de manera precisa y clara tanto para pc como para telfono los controles,
Namespaces,

eventos,

Code

Behind

el

diccionario

de

recursos

Las

actualizaciones de los controles existentes facilitan su uso y aumentan su


versatilidad.

Adaptar correctamente Code Behind que permiten asociar los archivos de cdigo
con los archivos de marcado, desde el lado archivo de marcado.

Comprender los recursos de Windows Presentation Foundation (WPF) admiten los


diccionarios de recursos, como herramienta que suministra una manera de definir la
parte correspondiente a los recursos de una aplicacin de WPF fuera de la
aplicacin de XAML compilada.

Suministrar los componentes propios para los espacios de nombres (namespaces)


basado en XAML.

Manejar el modelo de eventos para poder realizar algunas tareas bsicas.

MANEJO DEL LENGUAJE DE PROGRAMACIN C#

Estructura del lenguaje


C# es un lenguaje orientado a objetos, un programa C# se compone slo de
objetos. Entonces un objeto es la concrecin de una clase, y que una clase
equivale a la generalizacin de un tipo especfico de objetos. Todo programa C#
se est formado por al menos una clase que define un mtodo nombrado Main,
cmo lo muestro a continuacin:
Public class CMiAplicacion {
Public Static Void Main(string[ ] args) {
//escribe aqu el cdigo que quieres ejecutar
}
}
As una clase que contiene el mtodo Main es una plantilla para crear lo que se
denominar objeto principal (tambin llamado objeto de la aplicacin), objeto que
tiene como misin facilitar y finalizar la ejecucin del programa. Es decir, Main es
el punto de entrada y de salida en el programa.
Segn lo expuesto, la solucin de cualquier problema no debe de considerarse
inmediatamente en trminos de sentencias correspondientes a un lenguaje, sino
de objetos naturales del problema mismo. El empleo de est modelo de
desarrollos de programas, nos conduce al diseo y programacin orientada a
objetos.

Un Programa C# es un conjunto de objetos que se comunican entre s mediante


mensaje con el fin de obtener el resultado perseguido, y que la solucin del
problema puede resultar ms sencilla cundo consiga realizar una representacin
del problema en base a los objetos naturales que se deducen de su enunciado.
Un programa en C# consta de:

Directrices using (Establecer el mbito dnde localizar las clases de la

biblioteca .NET utilizadas en nuestro programa).


Una clase principal (la que incluye el Mtodo Main)
Otras clases.

Sabemos tambin que una clase encapsula los atributos de los objetos que
describen y los mtodos para manipularlos. Pues bien cada mtodo consta de:

Sentencias a ejecutar.
Definiciones y declaraciones.

Estructura de un Programa en C# (C Sharp)


La estructura bsica de un programa en C# se define como el siguiente ejemplo:
using System;
using System.Collections.Generic;
using System.Text;
namespace programa1
//se define espacio de nombre
{
class Program
{
static void Main(string[ ] args) //comienzo del programa
{
Console.writeline(PRIMER PROGRAMA!);
}
}
}

using System:
La directiva using System permite usar miembros de este espacio de nombres sin
poner la palabra System delante.
Si no se escribe esto sera necesario escribir la instruccin:
System.Console.WriteLine("PRIMER PROGRAMA!");

Un namespace (espacio de nombres):


Constituye una forma lgica de organizar y estructura nuestro cdigo de forma
que se puede organizar la funcionalidad con un determinado sentido semntico.
Ejemplos de namespace presentes en el framework son por ejemplo el
(namespace System) que contiene la funcionalidad bsica del framework, el
(namespace System.Collections) que contiene los tipos de datos de colecciones
(ArrayList, Listas Enlazadas) o el (namespace System.Collections.Generic) que
contiene los tipos de datos de colecciones que usan el nuevo sistema de
genericos de .NET 2.0.
Console:
Es una clase que no existe en el espacio de nombres global, sino en el espacio
de nombres System.
Write:
Es un mtodo de la clase Consola, que sirve para imprimir en la pantalla el
mensaje que deseemos, en este caso Hola.
Qu es una variable?
Una variable representa un valor que puede ser numrico, una cadena de
caracteres, un valor booleano o doubl, cada uno de estos tipos de datos se
pueden almacenar en diferentes variables, entindase por variable a la

representacin genrica de un tipo de dato en particular, generalmente las


variables tienen relacin con el dato que se desea ingresar.
Tipos de datos:
Los tipos de datos bsicos son los siguientes:
String: Representa una cadena de caracteres.
Int: Representa un entero sin decimal.
Float: Representa un numero con parte decimal o en coma flotante de 32 bits.
Boolean: Representa un valor lgico.
Double: Representa un valor numrico en coma flotante de 64 bits.
Objetc: Representa un objeto.

Sintaxis:
Como declarar una variable con tipo de dato String:
SINTAXIS: String <variable>;
Ejemplos:
String nombre;
String apellido;
String sexo;
String estado_civil;
Declaracin de datos enteros:

int <variable>;
Veamos el ejemplo anterior le aadiremos un atributo ms el cual ser la edad,
entonces
nos quedara as:

int edad;

Declaracin de datos flotantes:


Float <variable>;
float es un tipo de dato con coma flotante:
float sueldo;

Declaracin de datos booleanos


Boolean <variable>;
El tipo de dato boolean representa una variable que almacenara un valor lgico,
se usa generalmente para realizar comparaciones o para asignar atributos de rue
o False a los objetos.
Declaracin de datos flotantes dobles
Double <variable>;
Representa un valor numrico en coma flotante de 64 bits, se usa generalmente
para cuando se ingresan valores que sobrepasan la escala de valores de 32 bits.

Declaracin de datos tipo objeto


Objetc objeto;
Representa un objeto, el objeto puede ser cualquier elemento del mundo real. Si
se quiere poner un objeto en una variable se realiza de la siguiente manera:

Objetc Persona;
Persona representa un conjunto de atributos.
Generalmente las variables se inicializan a travs de un constructor, con valor
inicial en 0;

Algunas conversiones de tipos:


La conversin de datos se usa en C# de manera explcita,
En C# siempre se ingresan todos los valores con formato texto por lo que
se hace necesaria la conversin de tipos, ejemplo:
Cuando se quiere ingresar 2 valores numricos en formato texto, entonces la
declaracin seria as:
String n1, n2;
Se declaran los valores iniciales con formato texto.
Si se quiere realizar una suma, tendramos que declarar una variable de resultado
para almacenar el valor veamos:
String suma;
suma = n1+n2;
Si por ejemplo ingresamos 2 valores para realizar dicho calculo:
suma = 2+3;
Si se realiza este proceso entonces el resultado seria 23, suma=2+3=23, pero eso
no es un dato real, vemos entonces vemos que los valores en vez de sumarse se
concatenaron, pero si por el contrario hacemos lo siguiente:

int suma;
suma=int.parse(n1)+int.parse(n2);
Ingresamos los mismos valores entonces el resultado nos dara asi: 2+3=5 por lo
que suma captura el valor de 5 de la misma manera seria para convertir los otros
tipos siempre partiendo de una cadena de texto o String.

EJEMPLO SENCILLO USANDO TIPOS DE DATOS


using System;
public class Empezando {
public static void Main () {
string cadena = "hola";
int entero = 7;
double real = 0.2;
bool booleana = true;
Console.WriteLine ("definicin de varias
variables, de varios tipos...");
Console.WriteLine ("cadena={0}", cadena );
Console.WriteLine ("entero={0}", entero );
Console.WriteLine ("booleana={0}", booleana );
Console.WriteLine ("real={0}", real );
}
}
EJEMPLO DE SUMA DE DOS VARIABLES
int a;
int b;
int suma;

Console.WriteLine("Ingrese el primer numero a sumar");


a = int.Parse(Console.ReadLine());
Console.WriteLine("Ingrese el segundo numero a sumar");
b = int.Parse(Console.ReadLine());
suma = a + b;
Console.WriteLine("La suma es: " + suma);
Console.ReadLine(); //Pausa para ver el resultado

Nota: cuando se captura datos por medio de ReadLine, los datos son de tipo
String, por lo Que tenemos que convertir esos datos a nmeros, para ello se hace
uso de parse.

EJEMPLO USANDO SENTENCIA IF-ELSE


int a;
int b;
int i;
//uso del IF
Console.WriteLine("**********Ejemplo de IF**********");
Console.WriteLine("-Pide dos nmeros enteros y los compara");
//ingreso de datos
Console.WriteLine("Ingrese el primer nmero entero");
a = int.Parse(Console.ReadLine());
Console.WriteLine("Ingrese el segundo numero entero");
b = int.Parse(Console.ReadLine());
//estructura if
if (a >= b)
{

Console.WriteLine("A,{0} es mayor que B,{1}", a, b);


}
else
{
Console.WriteLine("B,{1} es mayor que A,{0}", a, b);
}
Console.Read();
//uso del FOR
Console.WriteLine("**********Ejemplo de FOR**********");
Console.WriteLine("Imprime numeros de 1 hasta 10");
for (i = 1; i <= 11; i++)
Console.WriteLine(i);
Console.Read();
//uso del WHILE
Console.WriteLine("**********Ejemplo de WHILE**********");
Console.WriteLine("Imprime numeros de 1 hasta 10");
i=1;
while(i <11)
{
Console.WriteLine(i);
i++;
}
Console.ReadLine();

CLASES
Clases en C#

Una clase es un tipo de dato por referencia que est compuesta bsicamente por
campos y mtodos (aunque ms adelante veremos otros elementos integrales de
esta construccin). Adems, si de tipos de datos por referencia se trata, la clase
es la construccin ms usada de todas (esto se ve en el volumen de definiciones
que componen la biblioteca de .NET), y los mismos tipos personalizados que
puede crear el propio programador a partir de un modelo generado a partir del
mundo del problema.
Por otro lado, a una clase la podemos ver como un plan de diseo o molde del
cual se pueden instanciar o crear objetos particulares para interactuar a travs de
mensajes con otros objetos de otras clases, adems compartir informacin
mutuamente o en un sentido en particular. En la Figura 1 se puede apreciar el
ejemplo de la clase car, y que a partir de este molde o plantilla se puede crear
objetos con caractersticas particulares: color, modelo, etc.: polo, mini, y beetle,
por ejemplo.

Relacin entre clase y objeto

Veamos cmo se implementa la definicin de la clase Carro en cdigo C#:


En el momento en que pasemos a temas ms complejos, veremos que una clase
ms sofisticada puede contener los siguientes elementos de definicin:

Atributos y modificadores de clase: public, internal, abstract, sealed, static,


unsafe, y partial. Todos los anteriores preceden a la palabra clave class [2].
Delante del identificador de la clase (como en Carro) se puede especificar
parmetros de tipos genricos, clase base (en herencia), o interfaces.

El cuerpo de la clase puede contener:

Mtodos
Propiedades
ndices
Campos
Constructores
Operadores sobrecargados
Tipos anidados (por ejemplo una clase anidada)
Un finalizador.

Declaracin de una Clase


Para la definicin de una clase debemos utilizar la palabra clave class. En el
cdigo fuente C# de ejemplo que se muestra a continuacin:
Podemos especificar el grado de visibilidad (mbito, o alcance, si se prefiere). En
este caso hemos declarado la clase como public. Esto permite a terceros usar la
clase para instanciacin de objetos, o herencia.
Seguido de la palabra clave class -lnea 1- viene el identificador o nombre de la
clase: Cliente. Entre las llaves de apertura ({) y cierre (}) se define todo el
conjunto de miembros que van a ser parte, como lo son: mtodos, campos,
constructores, propiedades, ndices, eventos, &c.
Creacin de Objetos

Cuando tengamos tipos de datos por referencia definidos, en este casos una o
ms clases, lo que podemos hacer enseguida es crear objetos para aprovechar
las capacidades que provee el tipo de dato.
La instanciacin o creacin de objetos se logra a travs del asignador de memoria
new (operador de instanciacin) As:
Cliente objetoCliente1 = new Cliente();
O en otro caso, donde sea necesario, slo se realiza la definicin del tipo de dato
del identificador:
Cliente objetoCliente2;
A razn de que las variables slo son referencias hacia los espacios de memoria
que contienen los datos, podemos hacer que varias variables apunten a la misma
direccin. Por ejemplo:
Cliente objetoCliente3 = new Cliente();
Cliente objetoCliente2 = objetoCliente3;
objetoCliente2 y objetoCliente3 son referencias al
consecuencia, apuntan a la misma direccin de memoria.

mismo

objeto,

en

Concepto de Herencia
La herencia es sinnimo de reusabilidad. A travs de la herencia podemos definir
un nuevo tipo de dato por referencia a partir de uno ya existente. Ms
tcnicamente, partimos de la existencia de un tipo de dato base del cual
derivamos datos y comportamiento, al producto de esta operacin -derivacin-, la
llamamos clase derivada.
La declaracin de una clase derivada se lleva a cabo as:

Cuando se lleva a cabo la operacin de derivacin, todos los miembros de la


clase base son herados por la clase derivada (tambin las podemos llamar: clase
hija).
La sintaxis en C# para derivar de una clase base consiste en separar por el token
de dos puntos (:): AdministradorTI : Empleado.
Un tema relacionado con la herencia, es el de la implementacin de interfaces.
Una interfaz es una declaracin o contrato, que est compuesto de mtodos
abstractos (sin implementacin) y campos estticos. La clase que implemente
una interfaz deber aceptar todo el contrato (implementar los mtodos), de lo
contrario se generar un error en tiempo de compilacin.
Por otro lado, tambin podemos hablar de las clases abstractas. stas no son
ms que clases que tienen uno o ms mtodos sin implementar. La clase que
herede de este tipo de clase deber implementar los mtodos vacos (abstractos).
Para evitar la herencia de un tipo, en la declaracin de la clase se debe preceder
el modificador de clase sealed.
A tener en mente:
En C# slo est permitada la herencia simple.
Para simular la herencia mltiple se puede utilziar el concepto de interfaces.

SENTENCIAS

Es el momento de hablar de las sentencias en el lenguaje de programacin C#. Las


sentencias son otros de los elementos de construccin individuales que describen
pasa-a-paso el cmo debe llevar a cabo un proceso que estemos programando, es
decir, la descripcin imperativa de lo que se debe hacer.

Sentencias de Seleccin
Las sentencias de seleccin alteran el flujo de control o de ejecucin del programa. En
C# existen diferentes construcciones que permiten llevar a cabo esta tarea. Se
clasifican
en:

Sentencias de seleccin:
if
switch
Operador Condicional ternario (?:)
Sentencias de iteracin o de ciclo:
while
do..while
for
foreach

La sentencia if
La sentencia if ejecuta el bloque de sentencias que parte de su construccin s y slo s
la evaluacin de la expresin booleana del encabezado da como resultado true.
Por ejemplo en,
if (Math.PI > Math.E)
Console.WriteLine ("Math.PI es mayor que Math.E");
la segunda sentencia se ejecuta siempre y cuando la evaluacin de Math.PI >
Math.E d como resultado lgico booleano true. De lo contrario se continua con la
siguiente sentencia inmediata.
Esta sentencia puede contener una o ms sentencias dentro de un bloque de llaves de
apertura ({) y de cierre (}). As:
if ( Math.PI > Math.E )
{
Console.WriteLine ("Math.PI es mayor que Math.E");
Console.WriteLine ("Otra sentencia ms");
}
4.2 La clusula else
La clusula else es el camino alterno que se toma en caso que la evaluacin de la
expresin
de
la
sentencia if d
como
resultado false.

if ( Math.PI > Math.E )


{
Console.WriteLine ("Math.PI es mayor que Math.E");
Console.WriteLine ("Otra sentencia ms");
}
else
{
Console.WriteLine
("Math.PI
es
}

menor

que

Math.E");

Debido a la flexbilidad del lenguaje, es posible anidar una sentencia if dentro de otra, o
dentro
de
una
clsula else.
Se recomienda el uso de identacin y el uso de llaves de cierre y apertura para
organizar el cdigo y hacerlo ms legible. De lo contrario caemos en el problema del
else suelto:
if (codigo == 201166771)
if ( promedio == 4.7 )
Console.WriteLine ("Se ha ganado un bono de 0.1");
else
Console.WriteLine ("El cdigo ingresado no se ha encontrado.");
Este problema empieza por la falta de organizacin del cdigo fuente. La
clusula else no hace parte del cuerpo del if externo -if (codigo == 201166771)- sino del
anidado -if (promedio == 4.7)-. Para evitar este inconveniente, la recomendacin es
usar
las
llevas
de
apertura
y
cierre;
as:

if (codigo == 201166771)
{
if ( promedio == 4.7 )
Console.WriteLine ("Se ha ganado un bono de 0.1");
}
else

Console.WriteLine ("El cdigo ingresado no se ha encontrado.");


A pesar de que Microsoft Visual Studio [2] automticamente se encarga de indentar el
cdigo fuente segn la sentencia que estemos utilizando, es buena prctica hacer el
uso de llaves, sobretodo cuando estemos usando un procesador de texto plano que no
tiene opciones avanzadas de formato del cdigo, por ejemplo, el bloc de notas de
Windows, o en casos an ms espartanos (con esto me refiero a geeks que tienden a
trabajar sobre herramientas precarias, pero muy profesionalmente) en un editor sobre
el prompt del sistemaoperativo.
La sentencia switch
Con la sentencia switch se selecciona uno o varios casos de varios casos candidatos
con
base
en
la
evaluacin
del
valor
de
control.
Pasemos a ver el siguiente ejemplo para que quede demostrada su utilidad prctica:
static void MostrarCarta(int numeroDeCarta)
{
switch (numeroDeCarta)
{
case 13:
Console.WriteLine ("Rey");
break;
case 12:
Console.WriteLine ("Reina");
break;
case 11:
Console.WriteLine ("Jack");
break;
default:

Console.WriteLine (numeroDeCarta);
}
}
Observemos que switch (numeroDeCarta) se evala lleva al caso correspondiente de
los 3 disponibles (13, 12, y 11); aunque tambin se ha especificado que en caso de no
darse ninguno de los anteriores, default es el caso por defecto que se evala.
La sentencia switch acepta expresiones que se evalen a valores de tipos de
datos bool, enum,
y string.
Adicionalmente, en cada caso candidato, se puede especificar sentencias de salto,
como
son
las
siguientes:

break: finaliza la ejecucin de la sentencia switch.


goto case x (redirecciona al caso seleccionado).
goto default (salta al caso por defecto).
Entre otras: return, throw, continue, y goto label.

Dado que una implementacin requiera que varios casos (en se conocen como: switch
sections) contengan el mismo cdigo, stos se deben enlistar de manera secuencial, y
poner la pieza de cdigo comn al final junto con la sentencia de salto break. Ejemplo:
switch(numeroDeCarta)
{
case 13:
case 12:
case 11:
Console.WriteLine ("Figuras");
break;
default:
Console.WriteLine ("Carta Numeral");
break;

}
La sentencia de salto break en el caso final o en la sentencia default, es opcional.
Sentencias de Iteracin
Las sentencias de iteracin son tiles para evitar la escritura de sentencias que
requieren ser ejecutadas mltiples veces. C# a travs de las sentencias de
iteracin while, do-while, for, y foreach logra llevar a cabo este cometido.
Ciclos while y do-while
El ciclo while repite un conjunto de sentencias un nmero determinado de veces (a
veces requerida, infinitamente) mientras que la expresin booleana del encabezado
sea true. Antes de entrar al cuerpo de la sentencia while, se prueba que la expresin
booleana
sea
verdadera.
Pasemos
al
siguiente
ejemplo:

class PruebaWhile
{
static void Main()
{
int n = 1;
while (n <= 5)
{
Console.WriteLine ("Valor actual de n es {0}", n);
++n;
}
}
}

Ahora, la sentencia iterativa do-while difiere sutilmente de la sentencia while en que la


primera realiza la evaluacin al final de la ejecucin del cuerpo de sentencias
repetitivas; es decir, que por lo menos el grupo anterior se ejecuta una vez.
La sentencia while ( opcion != 5 ); es ejecutada al final del bloque de cdigo (lneas 7 a
13). Sin embargo, el grupo anterior se ejecuta por lo menos una vez.
Sentencia repetitiva for
Las sentencias for y while son equivalentes funcionalmente, su diferencia radica en el
especificacin del encabezado: el ciclo while requiere de una expresin booleana, por
su lado, el ciclo for tiene un encabezado que consiste en:
for (inicializacin;condicin-continuacin-ciclo; clsula-iterativa )
sentencia-o-bloque-de-sentencias
Detalles del encabezado:

Inicialiacin: se refiere a la clusula que se ejecuta antes de que el ciclo empiece


a iterar. Se usa, como su nombre lo indica, para inicializar una o ms variables
de iteracin.
Condicin de continuacin de ciclo: Expresin booleana, que mientras genere un
valor verdadero, el ciclo continuar iterando.
Clsula Iterativa: Esta clusula se ejecuta despus de cada iteracin del bloque
de sentencias. Por lo general, se utiliza para actualizar el valor de las variables
de iteracin.

Con la serie Fibonacci [5] se ejemplifica [1] el uso de este ciclo:

for (int i = 0, fibonacciPrevio = 1, fibonacciActual = 1; i < 10; ++i)


{
Console.WriteLine (fibonacciPrevio);
int nuevoFibonacci = fibonacciPrevio + fibonacciActual;
fibonacciPrevio = fibonacciActual;
fibonacciActual = nuevoFibonacci;

}
Cualquiera de las partes del encabezado de la sentencia repetitiva for puede ser
omitido.
As:
int i = 0, fibonacciPrevio = 1, fibonacciActual = 1;
for (; i < 10;)
{
Console.WriteLine (fibonacciPrevio);
int nuevoFibonacci = fibonacciPrevio + fibonacciActual;
fibonacciPrevio = fibonacciActual;
fibonacciActual = nuevoFibonacci;
++i;
}
Este

cdigo

generar

los

mismos

resultados

que

el

anterior

(de

arriba).

Sentencia foreach
Esta sentencia es til para recorrer (equivalente a iterar) arreglos y colecciones (clases
que implementen las interfaces System.Collections
.IEnumerable [8] o System.Collections.Generic.IEnumerable [9]).
Su utilidad reside, en la lectura de los contenidos de arreglos y colecciones, no, para la
modificacin (edicin o eliminacin) de los contenidos de objetos de los tipos
anteriores.

OPERADORES Y TIPOS
Un operador en C# es un smbolo formado por uno o ms caracteres que permite
realizar una determinada operacin entre uno o ms datos y produce un resultado.
A continuacin se describen cules son los operadores incluidos en el lenguaje
clasificados segn el tipo de operaciones que permiten realizar, aunque hay que tener
en cuenta que C# permite la redefinicin del significado de la mayora de los
operadores segn el tipo de dato sobre el que se apliquen, por lo que lo que aqu se
cuenta se corresponde con los usos ms comunes de los mismos:

Operaciones aritmticas
Los operadores aritmticos incluidos en C# son los tpicos de suma (+), resta (-),
producto (*), divisin (/) y mdulo (%) Tambin se incluyen operadores de menos
unario () y ms unario (+)
Relacionados con las operaciones aritmticas se encuentran un par de operadores
llamados checked y unchecked que permiten controlar si se desea detectar los
desbordamientos que puedan producirse si al realizar este tipo de operaciones el
resultado es superior a la capacidad del tipo de datos de sus operandos. Estos
operadores se usan as:
checked (<expresinAritmtica>)
unchecked(<expresinAritmtica>)
Ambos operadores calculan el resultado de <expresinAritmtica> y lo devuelven si
durante el clculo no se produce ningn desbordamiento. Sin embargo, en caso de
que haya desbordamiento cada uno acta de una forma distinta:
Checked provoca un error de compilacin si <expresinAritmtica> es una expresin
constante y una excepcin System.OverflowException si no lo es, mientras que
unchecked devuelve el resultado de la expresin aritmtica truncado para modo que
quepa en el tamao esperado.
Por defecto, en ausencia de los operadores checked y unchecked lo que se hace es
evaluar las operaciones aritmticas entre datos constantes como si se les aplicase
checked y las operaciones entre datos no constantes como si se les hubiese aplicado
unchecked.
Operaciones lgicas
Se incluyen operadores que permiten realizar las operaciones lgicas tpicas: and (&&
y &), or (|| y |), not (!) y xor (^)Los operadores && y || se diferencia de & y | en que
los primeros realizan evaluacin perezosa y los segundos no. La evaluacin perezosa
consiste en que si el resultado de evaluar el primer operando permite deducir el
resultado de la operacin, entonces no se evala el segundo y se devuelve dicho
resultado directamente, mientras que la evaluacin no perezosa consiste en evaluar
siempre ambos operandos. Es decir, si el primer operando de una operacin && es
falso se devuelve false directamente, sin evaluar el segundo; y si el primer operando
de una || es cierto se devuelve true directamente, sin evaluar el otro.

Operaciones relacionales
Se han incluido los tradicionales operadores de igualdad (==), desigualdad (!=), mayor
que (>), menor que (<), mayor o igual que (>=) y menor o igual que (<=)
Operaciones de manipulacin de bits
Se han incluido operadores que permiten realizar a nivel de bits operaciones and (&),
or (|), not (~), xor (^), desplazamiento a izquierda (<<) y desplazamiento a
derecha (>>) El operador << desplaza a izquierda rellenando con ceros, mientras que
el tipo de relleno realizado por >> depende del tipo de dato sobre el que se aplica: si es
un dato con signo mantiene el signo, y en caso contrario rellena con ceros.
Operaciones de asignacin
Para realizar asignaciones se usa en C# el operador =, operador que adems de
realizar la asignacin que se le solicita devuelve el valor asignado. Por ejemplo, la
expresin a = b asigna a la variable a el valor de la variable b y devuelve dicho valor,
mientras que la expresin c = a = b asigna a c y a el valor de b (el operador = es
asociativo por la derecha)
Tambin se han incluido operadores de asignacin compuestos que permiten ahorrar
tecleo a la hora de realizar asignaciones tan comunes como:
temperatura = temperatura + 15; // Sin usar asignacin compuesta
temperatura += 15; // Usando asignacin compuesta
Las dos lneas anteriores son equivalentes, pues el operador compuesto += lo que
hace es asignar a su primer operando el valor que tena ms el valor de su segundo
operando. Como se ve, permite compactar bastante el cdigo.
Aparte del operador de asignacin compuesto +=, tambin se ofrecen operadores de
asignacin compuestos para la mayora de los operadores binarios ya vistos.
Estos son: +=, -=, *=, /=, %=, &=, |=, ^=, <<= y >>=. Ntese que no hay versiones
compuestas para los operadores binarios && y ||.
Otros dos operadores de asignacin incluidos son los de incremento(++) y decremento
(--) Estos operadores permiten, respectivamente, aumentar y disminuir en una unidad
el valor de la variable sobre el que se aplican. As, estas lneas de cdigo son
equivalentes:
temperatura = temperatura + 1; // Sin usar asignacin compuesta ni
incremento
temperatura += 1; // Usando asignacin compuesta
temperatura++;

// Usando incremento

Si el operador ++ se coloca tras el nombre de la variable (como en el ejemplo) devuelve


el valor de la variable antes de incrementarla, mientras que si se coloca antes,
devuelve el valor de sta tras incrementarla; y lo mismo ocurre con el operador
--. Por ejemplo:
c = b++; // Se asigna a c el valor de b y luego se incrementa b c = ++b;
c = ++b; // Se incrementa el valor de b y luego se asigna a c
La ventaja de usar los operadores ++ y -- es que en muchas mquinas son ms
eficientes que el resto de formas de realizar sumas o restas de una unidad, pues el
compilador traducirlos en una nica instruccin en cdigo mquina
.
Operaciones con cadenas
Para realizar operaciones de concatenacin de cadenas se puede usar el mismo
operador que para realizar sumas, ya que en C# se ha redefinido su significado para
que cuando se aplique entre operandos que sean cadenas o que sean una cadena y un
carcter lo que haga sea concatenarlos.
Por ejemplo,
Hola+ mundo devuelve Hola mundo, y Hola mundo + 'o' tambin.
Operaciones de acceso a tablas
Una tabla es un conjunto de ordenado de objetos de tamao fijo. Para acceder a
cualquier elemento de este conjunto se aplica el operador postfijo [ ] sobre la tabla para
indicar entre corchetes la posicin que ocupa el objeto al que se desea acceder dentro
del conjunto. Es decir, este operador se usa as:
[<posicinElemento>]
Un ejemplo de su uso en el que se asigna al elemento que ocupa la posicin 3 en una
tabla de nombre tablaPrueba el valor del elemento que ocupa la posicin 18 de dicha
tabla es el siguiente:
tablaPrueba[3] = tablaPrueba[18];

Operador condicional

Es el nico operador incluido en C# que toma 3 operandos, y se usa as:


<condicin> ? <expresin1> : <expresin2>
El significado del operando es el siguiente: se evala <condicin> Si es cierta se
devuelve el resultado de evaluar <expresin1>, y si es falsa se devuelve el resultado de
evaluar <condicin2>.
Un ejemplo de su uso es:
b = (a>0)? a : 0;

// Suponemos a y b de tipos enteros

En este ejemplo, si el valor de la variable a es superior a 0 se asignar a b el valor de


a, mientras que en caso contrario el valor que se le asignar ser 0.
Generalmente, en estas mquinas ++ se convierte en una instruccin INC y -- en una
instruccin DEC
Hay que tener en cuenta que este operador es asociativo por la derecha, por lo que
una expresin como a?b:c?d:e es equivalente a a?b:(c?d:e)
No hay que confundir este operador con la instruccin condicional if que se tratar en
el
Operaciones de delegados
Un delegado es un objeto que puede almacenar en referencias a uno o ms mtodos y
a travs del cual es posible llamar a estos mtodos. Para aadir objetos a un delegado
se usan los operadores + y +=, mientras que para quitrselos se usan los operadores

Operaciones de acceso a objetos


Para acceder a los miembros de un objeto se usa el operador cuya sintaxis es:
<objeto>.<miembro>
Si a es un objeto, ejemplos de cmo llamar a diferentes miembros suyos son:
a.b = 2; // Asignamos a su propiedad a el valor 2
a.f(); // Llamamos a su mtodo f()
a.g(2); // Llamamos a su mtodo g() pasndole como parmetro el valor entero
2
a.c += new adelegado(h) // Asociamos a su evento c el cdigo del mtodo h() de

//tipo adelegado
No se preocupe si no conoce los conceptos de mtodos, propiedades, eventos y
delegados en los que se basa este ejemplo, pues se explican detalladamente en temas
posteriores.
Operaciones con punteros
Un puntero es una variable que almacena una referencia a una direccin de memoria.
Para obtener la direccin de memoria de un objeto se usa el operador &, para acceder
al contenido de la direccin de memoria almacenada en un puntero se usa el operador
*, para acceder a un miembro de un objeto cuya direccin se almacena en un puntero
se usa ->, y para referenciar una direccin de memoria de forma relativa a un puntero
se le aplica el operador
[ ] de la forma puntero[desplazamiento].

Operaciones de obtencin de informacin sobre tipos:


De todos los operadores que nos permiten obtener informacin sobre tipos de datos el
ms
importante es typeof, cuya forma de uso es:
typeof(<nombreTipo>)
Este operador devuelve un objeto de tipo System.Type con informacin sobre el tipo
de nombre <nombreTipo> que podremos consultar a travs de los miembros ofrecidos
por dicho objeto. Esta informacin incluye detalles tales como cules son sus
miembros, cul es su tipo padre o a qu espacio de nombres pertenece.
Si lo que queremos es determinar si una determinada expresin es de un tipo u otro,
entonces el operador a usar es is, cuya sintaxis es la siguiente:
<expresin> is <nombreTipo>
El significado de este operador es el siguiente: se evala <expresin>. Si el resultado
de sta es del tipo cuyo nombre se indica en <nombreTipo> se devuelve true; y si no,
se devuelve false, este
operador suele usarse en mtodos polimrficos.
Finalmente, C# incorpora un tercer operador que permite obtener informacin sobre un
tipo de dato:

sizeof Este operador permite obtener el nmero de bytes que ocuparn en memoria los
objetos de un tipo, y se usa as:
sizeof(<nombreTipo>)
sizeof slo puede usarse dentro de cdigo inseguro, que por ahora basta considerar
que son zonas de cdigo donde es posible usar punteros.
sizeof slo se puede aplicar sobre nombres de tipos de datos cuyos objetos se puedan
almacenar directamente en pila. Es decir, que sean estructuras
Operaciones de creacin de objeto: El operador ms tpicamente usado para crear
objetos es new, que se usa as:
new <nombreTipo>(<parametros>)
Este operador crea un objeto de <nombreTipo> pasndole a su mtodo constructor los
parmetros indicados en <parmetros> y devuelve una referencia al mismo.
En funcin del tipo y nmero de estos parmetros se llamar a uno u otro de los
constructores del objeto. As, suponiendo que a1 y a2 sean variables de tipo Avin,
ejemplos de uso del operador new son:
Avin a1 = new Avin(); // Se llama al constructor sin parmetros de Avin
Avin a2 = new Avin(Caza); // Se llama al constructor de Avin que toma
// como parmetro una cadena
En caso de que el tipo del que se haya solicitado la creacin del objeto sea una clase,
ste se crear en memoria dinmica, y lo que new devolver ser una referencia a la
direccin de pila donde se almacena una referencia a la direccin del objeto en
memoria dinmica. Sin embargo, si el objeto a crear pertenece a una estructura o a un
tipo enumerado, entonces ste se crear directamente en la pila y la referencia
devuelta por el new se referir directamente al objeto creado.
Por estas razones, a las clases se les conoce como tipos referencia ya que de sus
objetos en pila slo se almacena una referencia a la direccin de memoria dinmica
donde verdaderamente se encuentran; mientras que a las estructuras y tipos
enumerados se les conoce como tipos valor ya sus objetos se almacenan
directamente en pila.
C# proporciona otro operador que tambin nos permite crear objetos. ste es
stackalloc, y se usa as:
stackalloc <nombreTipo>[<nElementos>]

Este operador lo que hace es crear en pila una tabla de tantos elementos de tipo
<nombreTipo> como indique <nElementos> y devolver la direccin de memoria en que
sta ha sido creada. Por ejemplo:
stackalloc slo puede usarse para inicializar punteros a objetos de tipos valor
declarados como variables locales. Por ejemplo:
int * p = stackalloc[100]; // p apunta a una tabla de 100 enteros.
Operaciones de conversin: Para convertir unos objetos en otros se utiliza el
operador de conversin, que no consiste ms que en preceder la expresin a convertir
del nombre entre parntesis del tipo al que se desea convertir el resultado de evaluarla.
Por ejemplo, sil es una variable de tipo long y se desea almacenar su valor dentro de
una variable de tipo int llamada i, habra que convertir previamente su valor a tipo int
as:
i = (int) l; // Asignamos a i el resultado de convertir el valor de l a tipo int
Los tipos int y long estn predefinidos en C# y permite almacenar valores enteros con
signo. La capacidad de int es de 32 bits, mientras que la de long es de 64 bits. Por
tanto, a no ser que hagamos uso del operador de conversin, el compilador no nos
dejar hacer la asignacin, ya que al ser mayor la capacidad de los long, no todo valor
que se pueda almacenar en un long tiene porqu poderse almacenar en un int. Es
decir, no es vlido:
i = l; //ERROR: El valor del no tiene porqu caber en i
Esta restriccin en la asignacin la impone el compilador debido a que sin ella podran
producirse errores muy difciles de detectar ante truncamientos no esperados debido al
que el valor de la variable fuente es superior a la capacidad de la variable destino.
Existe otro operador que permite realizar operaciones de conversin de forma muy
similar al ya visto. ste es el operador as, que se usa as:
<expresin> as <tipoDestino>
Lo que hace es devolver el resultado de convertir el resultado de evaluar <expresin>
al tipo indicado en <tipoDestino> Por ejemplo, para almacenar en una variable p el
resultado de convertir un objeto t a tipo tipo Persona se hara:
p = t as Persona;
Las nicas diferencias entre usar uno u otro operador de conversin son:

as slo es aplicable a tipos referencia y slo a aquellos casos en que existan


conversiones predefinidas en el lenguaje. Como se ver ms adelante, esto slo
incluye conversiones entre un tipo y tipos padres suyos y entre un tipo y tipos hijos
suyos.
Una consecuencia de esto es que el programador puede definir cmo hacer
conversiones de tipos por l definidos y otros mediante el operador (), pero no
mediante as.
Esto se debe a que as nicamente indica que se desea que una referencia a un objeto
en memoria dinmica se trate como si el objeto fuese de otro tipo, pero no implica
conversin ninguna. Sin embargo, ( ) s que implica conversin si el <tipoDestino> no
es compatible con el tipo del objeto
referenciado. Obviamente, el operador se aplirar mucho ms rpido en los casos
donde no sea necesario convertir.
En caso de que se solicite hacer una conversin invlida as devuelve null mientras
que () produce una excepcin System.InvalidCastException.

CONCLUSIONES

Este lenguaje declarativo basado en XML nos permite declarar estructuras de objetos
generalmente visuales pero en realidad, prcticamente podemos instanciar cualquier
objeto desde este lenguaje

Adems, a XAML lo respaldan herramientas de desarrollo y diseo smamente


sofisticadas como Visual Studio y Expression Blend. Inclusive hay herramientas de
terceros que tambin cuentan con la opcin de exportar hacia XAML (Adobe Photoshop
e Illustrator por ejemplo).
Este lenguaje ha ido asociado a la tecnologa WPF, aunque realmente ni WPF necesita
XAML ni XAML est concebido solo para WPF. Es decir, podemos desarrollar una
aplicacin WPF en cdigo C#, declarando los elementos y los manejadores de eventos
de la interfaz directamente en cdigo, aunque sera contraproducente no utilizar XAML
para ello, ya que es una de las principales ventajas que ofrece WPF, proporcionando un
entorno Wysiwyg para acercarnos a una solucin final.

RECOMENDACIONES
la extensin de marcado que afecta en mayor medida a la orientacin proporcionada en
este tema es la extensin de marcado StaticResource. La funcin de la extensin de
marcado StaticResource es permitir la factorizacin del XAML en recursos reutilizables
procedentes de un ResourceDictionary XAML.

Casi siempre defines las plantillas de control y los estilos relacionados en un


ResourceDictionary. A menudo tambin defines las partes ms pequeas de una
plantilla de control o un estilo especfico de la aplicacin en un ResourceDictionary; por
ejemplo, unSolidColorBrush para un color que tu aplicacin usa ms de una vez en
distintas partes de la interfaz de usuario.
Mediante el uso de un StaticResource, cualquier propiedad que de otro modo requerira
el uso de un elemento de propiedad para establecerse, ahora puede establecerse
mediante sintaxis de atributo. Pero las ventajas de la factorizacin de XAML para
permitir la reutilizacin no se limitan a simplificar la sintaxis de nivel de pgina.
Vers varias convenciones distintas sobre la aplicacin de espacios en blanco y
avances de lnea en ejemplos de XAML. En concreto, hay distintas convenciones sobre
la divisin de elementos de objeto que tienen muchos atributos distintos establecidos.
Es solo una cuestin de estilo. El editor XML de Visual Studio aplica algunas reglas de
estilo predeterminadas cuando editas XAML, pero puedes cambiarlas en la
configuracin. En un nmero reducido de casos, el espacio en blanco en un archivo
XAML se considera importante.

BIBLIOGRAFIA

Gonzlez seco, j. (2016). El lenguaje de programacin C#. Universidad de Murcia.


Obtenido 11 Mayo 2016, de
http://dis.um.es/~bmoros/privado/bibliografia/LibroCsharp.pdf

Curso de iniciacin a C#. (2016). Elguille.info. Obtenido 12 Mayo 2016, de


http://www.elguille.info/NET/cursoCSharpErik/index.htm

Manual Completo de C# Sharp en Espaol - 2014. (2016). Fiuxy. Obtenido 12 Mayo


2016, de http://www.fiuxy.net/trucos-manuales-y-guias/3740971-manual-completode-c-sharp-en-espanol-2014-a.html

Tutorial C# - #1 Clases y Mtodos. (2016). YouTube. Obtenido 12 May 2016, de


https://www.youtube.com/watch?
v=eWPp45h2HjA&list=PLMTiAh6qhda03vsIXSKHfMhaRbiUvUbcX

También podría gustarte