Beruflich Dokumente
Kultur Dokumente
Introducción a .Net
1- Introducción a Microsoft .Net
¿Qué es .NET ?
Microsoft .Net es un conjunto de Tecnologías de software para conectar información, personas,
sistemas y dispositivos. Permite un alto nivel de integración del software mediante el uso de
Servicios Web.
Esta Tecnología se apoya en el .net Framework y en el ambiente de desarrollo multi-lenguaje
Visual Studio.net
Biblioteca de Clases
La biblioteca de clases de .NET Framework es una colección de tipos reutilizables que se integran
estrechamente con Common Language Runtime. La biblioteca de clases está orientada a objetos,
lo que proporciona tipos de los que su propio código administrado puede derivar funciones. Esto
ocasiona que los tipos de .NET Framework sean sencillos de utilizar y reduce el tiempo asociado
con el aprendizaje de las nuevas características de .NET Framework. Además, los componentes
de terceros se pueden integrar sin dificultades con las clases de .NET Framework.
Como en cualquier biblioteca de clases orientada a objetos, los tipos de .NET Framework permiten
realizar diversas tareas de programación comunes, como son la administración de cadenas,
recolección de datos, conectividad de bases de datos y acceso a archivos. Además de estas tareas
habituales, la biblioteca de clases incluye tipos adecuados para diversos escenarios de desarrollo
especializados.
Ensablados
Los ensamblados son las unidades de creación de las aplicaciones .NET Framework; constituyen
la unidad fundamental de implementación, control de versiones, reutilización, ámbitos de activación
y permisos de seguridad. Un ensamblado es una colección de tipos y recursos creados para
funcionar en conjunto y formar una unidad lógica de funcionalidad. Los ensamblados proporcionan
a Common Language Runtime la información necesaria para conocer las implementaciones de
tipos. Para el motor en tiempo de ejecución, un tipo no existe si no es en el contexto de un
ensamblado.
Espacios de Nombres (Namespace)
Los espacios de nombres organizan jerárquicamente los objetos definidos en un ensamblado. Un
ensamblado puede contener varios espacios de nombres; éstos, a su vez, pueden contener otros
espacios de nombres. Los espacios de nombres evitan las ambigüedades y simplifican las
referencias cuando se utilizan grupos grandes de objetos, como bibliotecas de clases.
Dentro de un espacio de nombres pueden definirse elementos como los módulos, interfaces,
clases, delegados, enumeraciones, estructuras y otros espacios de nombres. Los elementos como
propiedades, procedimientos, variables y eventos no se pueden definir en el nivel de espacio de
nombres sino que deben declararse dentro de los contenedores como módulos, estructuras o
clases.
namespace AplicacionPrueba {
public partial class Form1: Form
{
public Form1()
{
InitializeComponent();
}
}
}
Los nombres completos son referencias de objetos que llevan como prefijo el nombre del espacio
de nombres en el que está definido el objeto. Los nombres completos evitan los conflictos de
nombres porque permiten al compilador determinar qué objeto se utiliza. No obstante, los nombres
pueden llegar a ser largos y complicados. Para solucionar este problema, puede utilizar la
instrucción using para definir un alias, es decir, un nombre abreviado que sustituya al nombre
completo.
namespace EspacioEjemplo
{
namespace EspacioEjemplo2
{
public partial class ClaseEjemplo
{
}
}
}
Definiendo:
using EspacioEjemplo.EspacioEjemplo2;
Proyectos y Soluciones
Visual Studio dispone de dos contenedores que le ayudan a administrar eficazmente los elementos
necesarios para el desarrollo, como referencias, conexiones de datos, carpetas y archivos. Estos
contenedores se denominan soluciones y proyectos. Asimismo, Visual Studio proporciona carpetas
de soluciones para organizar proyectos relacionados en grupos y, a continuación, llevar a cabo
acciones en esos grupos de proyectos
Los proyectos son contenedores que se ubican en una solución para administrar, compilar y
almacenar ítems. El contenido de los ítems depende del proyecto que se está desarrollando y del
lenguaje. Pueden ser archivos de código, imágenes, gráficos, etc.
Soluciones
Una solución permite a los desarrolladores concentrarse en la tarea de desarrollo y distribución de
los proyectos, en lugar de resolver detalles de administración de los archivos de proyecto y los
componentes.
Una solución de Visual Studio permite:
Trabajar con varios proyectos en la misma instancia de Visual Studio
Trabajar con ítems utilizando configuraciones y opciones que se aplican a un conjunto de
proyectos
Utilizar el Explorador de Soluciones para diseñar y compilar la solución
Visual Studio genera automáticamente una solución cuando se crea un nuevo proyecto. Es posible
agregar nuevos proyectos a una solución a medida que se necesitan.
Para administrar los proyectos y archivos de una solución, el Explorador de Soluciones provee una
vista gráfica de toda la solución. También permite agregar carpetas de ítems que no pertenecen al
proyecto.
La definición de la solución se crea en dos archivos:
Una definición de solución .sln
Opciones de usuario de la solución .suo
Una solución puede contener varios proyectos que pueden ser abiertos, cerrados y salvados al
mismo tiempo. Cada proyecto en una solución puede contener varios archivos o ítems. Los tipos
de los ítems contenidos en un proyecto dependen del lenguaje de desarrollo utilizado.
La relación lógica entre una solución y sus componentes no reflejan, necesariamente, la forma en
la que la solución y sus componentes son almacenados en el disco. Si se crea una aplicación que
consta de varios proyectos, es recomendable crear una carpeta de solución donde se almacenen
todos los proyectos.
Plantillas de Proyectos
Visual Studio permite acceder a un número predefinido de plantillas. Al agregar diferentes módulos,
estos agregan plantillas. Las plantillas de proyectos permiten a los desarrolladores concentrarse en
la funcionalidad específica que se desea implementar y es desde el proyecto donde se administra
las diversas tareas referidas a la compilación, guardado y apertura.
Al instalar Visual Studio también se instalan una serie de plantillas de proyectos y elementos
predefinidas. Por ejemplo, las plantillas de la Biblioteca de clases y aplicaciones para Windows de
Visual Basic y Visual C# disponibles en el cuadro de diálogo Nuevo Proyecto son todas ejemplos
de plantillas de proyectos. Las plantillas de elementos instaladas están disponibles en el cuadro de
diálogo Agregar Nuevo Elemento e incluyen los elementos como archivos XML, páginas HTML y
Hojas de estilo.
Estas plantillas proporcionan un punto inicial a los usuarios para empezar a crear nuevos proyectos
o ampliar los proyectos actuales. Las plantillas de proyecto proporcionan los archivos básicos
necesarios para un tipo de proyecto determinado, para incluir referencias a ensamblado estándar y
establecer propiedades de proyecto y opciones de compilador predeterminadas.
Las plantillas de elementos pueden abarcar desde un único archivo vacío con la extensión de
archivo correcta hasta un elemento de varios archivos que contenga elementos como archivos de
código fuente con código auxiliar, archivos de información de diseñador y recursos incrustados.
Además de las plantillas instaladas disponibles en los cuadros de diálogo Nuevo proyecto y
Agregar nuevo elemento, puede crear sus propias plantillas o descargar y usar plantillas creadas
por la comunidad.
Para acceder a la plantilla de proyectos desde el menú: Archivos -> Nuevo Proyecto
Una vez seleccionado el tipo de proyecto, se deben completar campos que determinan ubicación e
identificación del proyecto y de la solución que lo contiene.
Nombre: Determina el nombre del proyecto.
Ubicación: Permite seleccionar la ubicación física de la Solución y Proyecto
Solución: Da la opción de crear una nueva solución contenedora del proyecto o incluirlo en
una solución preexistente
Nombre de la Solución: Nombre de la solución que se creará junto al proyecto. Por defecto
es el mismo nombre que el proyecto.
Tipos de Proyectos
A continuación se mencionan algunos tipos de proyectos disponibles:
Aplicaciones de Windows (Windows Forms)
Aplicaciones de Windows Presentation Foundation (WPF)
Aplicaciones de consola.
Aplicaciones de ASP.NET
Servicios Web.
Servicios de Windows
Aplicaciones orientadas a servicios utilizando Windows Communication Foundation (WCF).
Aplicaciones habilitadas para el flujo de trabajo utilizando Windows Workflow Foundation
(WF).
Presentación del Entorno de Desarrollo (IDE)
El entorno de desarrollo integrado (IDE) es un conjunto de herramientas de desarrollo expuestas a
través de una interfaz de usuario común. Algunas de las herramientas se comparten con otros
lenguajes de Visual Studio, y otras, como el compilador de C#, son exclusivas de Visual C#.
A continuación se detallan las herramientas y ventanas más importantes de Visual C#. Las
ventanas de la mayoría de estas herramientas se pueden abrir desde el menú Ver.
El Editor de código, para escribir código fuente.
El compilador de C#, para convertir el código fuente de C# en un programa ejecutable.
El depurador de Visual Studio, para depurar el programa.
El Cuadro de herramientas y el Diseñador, para desarrollar rápidamente interfaces de
usuario con el mouse.
El Explorador de soluciones, para ver y administrar archivos de proyecto y configuraciones.
El Diseñador de proyectos, para configurar opciones del compilador, rutas de
implementación, recursos, etc.
La Vista de clases, para navegar por el código fuente según los tipos, no los archivos.
La ventana Propiedades, para configurar propiedades y eventos en los controles de la
interfaz de usuario.
El Explorador de objetos, para ver los métodos y clases disponibles en las bibliotecas de
vínculos dinámicos, incluidos los ensamblados de .NET Framework y los objetos COM.
Esquema de Documentos, proporciona una vista esquemática de los elementos y
secuencias de comandos del documento actual.
Explorador de soluciones
La ventana de la parte superior derecha es el
Explorador de soluciones, que muestra todos los
archivos del proyecto en una vista de árbol jerárquica.
Cuando se utiliza el menú Proyecto para agregar
nuevos archivos al proyecto, se verán reflejados en el
Explorador de soluciones. Además de los archivos, el
Explorador de soluciones también muestra la
configuración del proyecto y las referencias a las
bibliotecas externas que necesita la aplicación.
Para obtener acceso a las páginas de propiedades del
Diseñador de proyectos, haga clic con el botón
secundario del mouse en el nodo Propiedades del
Explorador de soluciones y, a continuación, haga clic
en Abrir. Utilice estas páginas para modificar opciones
de generación, requisitos de seguridad, detalles de
implementación y muchas otras propiedades del
proyecto.
Ventana de Propiedades
Cuadro de herramientas
El Cuadro de herramientas muestra los iconos de los
elementos que puede agregar a los proyectos Visual
Studio.
Cada icono del Cuadro de herramientas se puede arrastrar
y colocar en una superficie de vista de diseño; o bien,
copiarse y pegarse en un editor de código dentro del
entorno de desarrollo integrado (IDE) de Visual Studio.
Cualquier acción agrega el código básico para crear una
instancia del elemento del Cuadro de herramientas en el
archivo del proyecto activo.
Referencias de Proyectos
Para poder escribir un código que trabaje con un componente externo, el proyecto debe contener
en primer lugar una referencia al mismo. Puede hacer referencia a los siguientes tipos de
componentes:
Bibliotecas de clases o ensamblados de .NET Framework
Componentes COM
Otros ensamblados o bibliotecas de clases de proyectos de la misma solución
Servicios Web XML
Use Agregar referencia (Cuadro de diálogo) para agregar referencias a los componentes en
tiempo de diseño. También puede utilizar el cuadro de diálogo Agregar referencia para ir a
ensamblados que no se muestren. No puede agregar referencias de Caché de ensamblados global
(GAC), ya que forma parte estrictamente del entorno de tiempo de ejecución.
Lenguajes de Visual Studio .Net
Visual Basic .Net
Rescrito por completo para trabajar bajo .NET. Ahora totalmente orientado a objetos.
Características:
Sintaxis similar a Visual Basic de versiones anteriores
Herencia, Sobrecarga, Constructores y miembros estáticos
Administración estructurada de excepciones
Comprobación de Tipos
Incluye IntelliSense.
C#
Fue un lenguaje creado especialmente para .NET. Totalmente orientado a objetos.
Características:
Sintaxis similar a C++, Java
Basada en signos de llaves {}
Tipos seguros
Sensible a mayúsculas y minúsculas
Todo es tratado como objetos
Las líneas finaliza con un ; (punto y coma)
Incluye IntelliSense.
Visual C++
Permite la generación de código C++, que no sea manejado por el CRL (.Net Framework)
Características:
Lenguaje Orientado a Objeto
Compatible con COM y con integración de código de plataformas.
Incluye seguridad de tipos.
Proporciona seguridad por medio de mecanismos de confianza intrínsecos del código.
Compatible con componentes XML basados en Web y conceptos de metadatos
extensibles.
Interoperabilidad con otros lenguajes, entre plataformas y con datos heredados.
Capacidad de control de versiones para facilitar la administración y la implementación.
Incluye IntelliSense.
Introducción
Windows Forms es una de las dos tecnologías que se utiliza en Visual C# para crear aplicaciones
cliente inteligentes basadas en Windows que se ejecutan en .NET Framework. Windows Forms es
especialmente adecuado para escenarios de desarrollo rápido de aplicaciones donde la prioridad
principal no es una interfaz gráfica de usuario compleja.
Formularios Windows
Un formulario es una superficie visual en la que se muestra información al usuario. Normalmente
las aplicaciones de Windows Forms se generan agregando controles a los formularios y
programando respuestas a las acciones del usuario, como clics del mouse (ratón) o presiones de
teclas. Un control es un elemento de la interfaz de usuario discreto que muestra datos o acepta la
entrada de datos.
Cuando un usuario hace algo en su formulario o en alguno de sus controles, la acción genera un
evento. La aplicación reacciona a estos eventos utilizando código y procesa los eventos cuando
aparecen.
Los formularios Windows Forms contienen diversos controles que puede agregar a los formularios:
controles que muestran cuadros de texto, botones, cuadros desplegables, botones de opción e
incluso páginas Web.
Con el Diseñador de Windows Forms de arrastrar y colocar de Visual Studio, puede crear con
facilidad aplicaciones de Windows Forms. Simplemente seleccione los controles con el cursor y
agréguelos donde desee en el formulario. El diseñador dispone de herramientas como líneas de
cuadrícula y líneas de ajuste para minimizar la molestia de alinear los controles.
Su evento más usado es el evento Load que se ejecuta al cargar el formulario en memoria.
Algunas de sus propiedades son: Text, Enabled, FormBorderStyle, Icon, MaximizeBox,
MinimizeBox, ControlBox, Size, StartPosition y WindowsState.
Controles
Los controles de los formularios Windows Forms son componentes reutilizables que encapsulan
funciones de la interfaz de usuario y se utilizan en aplicaciones Windows cliente. Estos formularios
Windows Forms no sólo proporcionan varios controles listos para usar, sino que también
proporcionan la infraestructura para desarrollar controles personalizados. Los controles existentes
se pueden combinar entre sí o ampliar, también se pueden crear otros controles personalizados.
Control Button
Control TextBox
Control Label
Control ComboBox
Control ListBox
Representa un control de Windows para mostrar una lista de elementos.
El control ListBox permite mostrar una lista de elementos para que el usuario los seleccione
haciendo clic en ellos. Un control ListBox puede proporcionar una o varias selecciones mediante la
propiedad SelectionMode. La propiedad Items permite ingresar la lista de valores
Control RadioButton
Permite al usuario seleccionar una única opción entre un grupo de elecciones cuando se
emparejan con otros controles RadioButton.
Cuando el usuario selecciona un botón de opción dentro de un grupo, los otros se borran
automáticamente. Todos los controles RadioButton de un contenedor determinado, como Form,
constituyen un grupo. Para crear varios grupos en un formulario, coloque cada grupo en su propio
contenedor, como un control GroupBox o Panel.
La propiedad Checked permite saber si la opción esta seleccionada o no.
Control CheckBox
Utilice un control CheckBox para dar al usuario una opción del tipo verdadero/falso o sí/no. El
control CheckBox de casilla de verificación puede mostrar una imagen o texto, o ambos.
La propiedad Checked permite saber si la opción esta seleccionada o no
MessageBox
Muestra un cuadro de mensaje que puede contener texto, botones y símbolos que informan e
instruyen al usuario.
Introducción a Eventos
Un evento es una acción a la que se puede responder o que se puede "controlar" mediante código.
Los eventos se pueden generar mediante una acción del usuario, por ejemplo, haciendo clic con el
mouse (ratón) o presionando una tecla, mediante código del programa o mediante el sistema.
Las aplicaciones controladas por eventos ejecutan código en respuesta a los eventos. Cada
formulario y cada control exponen un conjunto de eventos predefinido que se puede utilizar al
programar. Si se produce uno de estos eventos y hay código en el controlador de eventos
asociado, se invocará este código.
Los tipos de eventos que produce un objeto varían, pero muchos tipos son comunes a la mayoría
de los controles. Por ejemplo, la mayoría de los objetos controlan un evento Click
Introducción al lenguaje
C#
1- Introducción a C#
Definición
La estructura de un lenguaje de programación específica los elementos que debe incluir en su
aplicación y define cómo organizar estos elementos para que el compilador entienda su código.
El siguiente código muestra la estructura básica de una aplicación C#:
using System;
class HelloWorld
{
static void Main()
{
Console.WriteLine("Hola Mundo");
}
}
Los elementos y los principios de organización que se muestran en las seis líneas de código
anteriores son brevemente descriptas línea por línea en las siguientes secciones.
La palabra reservada using: Hace referencia a recursos de la biblioteca del .NET
Framework de Microsoft. Se utiliza para crear un alias para un espacio de nombres o para
importar tipos definidos en otros espacios de nombres.
El espacio de nombres (namespace) System: System es el espacio de nombres que
provee acceso a toda la funcionalidad de sistema sobre la cual se construye la aplicación.
Class: Programar en C#, o en cualquier lenguaje orientado a objetos, consiste en escribir
clases, las cuales se usan para crear objetos. En el ejemplo de código, la clase se llama
HelloWorld.
El método Main: Los métodos describen el comportamiento de una clase. En la tercera
línea, static void Main es un método global que le dice al compilador donde comienza la
ejecución de la aplicación. Toda aplicación C# debe incluir un método Main en una de las
clases. Normalmente el método Main se encuentra en Program.cs
Sentencias
Las sentencias son instrucciones que se completan para realizar acciones en aplicaciones C#. Las
sentencias están separadas entre sí por un punto y coma, para permitir al compilador distinguir
unas de otras.
Algunos lenguajes ubican una sentencia por línea. En C#, usted puede incluir múltiples sentencias
en una línea, o una sentencia en múltiples líneas. Es buena práctica escribir una sentencia por
línea; aunque, por cuestiones de legibilidad, es mejor dividir una sentencia larga en varias líneas.
Llaves
Las llaves {} se usan para identificar el comienzo y el final de bloques de código en una aplicación.
Cada llave que abre debe tener su correspondiente llave que cierra.
En el ejemplo, las llaves que siguen a “class HelloWorld” encierran los ítems que están dentro de la
clase HelloWorld. Las llaves que siguen a “Main” se usan para encerrar las sentencias que están
en el método Main.
Microsoft Visual Studio® .NET provee varias señales para asegurarse que sus llaves estén
correctamente cerradas. Cuando se escribe una llave que cierra, los elementos que encierra
aparecen en negrita por un instante. También, los indicadores que están en el margen izquierdo
del documento muestran el alcance del grupo de sentencias.
using System;
class HelloWorld
{
static void Main()
{
Console.WriteLine("Hola Mundo");
//escribe Hola Mundo
}
}
Indentación
La indentación indica que la sentencia se encuentra dentro de un mismo grupo de sentencias.
Las sentencias que están en un mismo grupo o bloque deberían estar indentadas al mismo nivel.
Esta es una convención importante que mejora la legibilidad de su código. Aunque la indentación
no es obligatoria, o requerida por el compilador, es una práctica recomendada.
Espacio en blanco
El espacio en blanco es ignorado por el compilador. Por eso, se pueden usar espacios en blanco
para mejorar la legibilidad y el formato del código. La única excepción es que el compilador no
ignora los espacios entre comillas.
Comentarios
Se pueden incluir comentarios de una sola línea en una aplicación insertando una doble barra (//)
seguida del comentario.
Alternativamente, si su comentario es muy largo y ocupa múltiples líneas, puede usar barra
asterisco (/*) para indicar el comienzo de un comentario y asterisco barra (*/) para indicar el final de
su comentario.
El siguiente ejemplo es un comentario de múltiples líneas que incluye un asterisco al principio de
cada línea. Estos asteriscos son opcionales y puede incluirlos para hacer que el comentario sea
más fácil de identificar.
/*
* Comentario de múltiples líneas
* Este ejemplo muestra cómo dar formato a un
* comentario de múltiples líneas en C#
*/
/* uso alternativo de este comentario */
Diseño
Usted puede ubicar la llave que abre al final de la línea en que comienza el grupo, o puede ubicar
la llave en la siguiente línea del método o clase, tal como se muestra en el siguiente ejemplo:
using System;
class HelloWorld
{
static void Main()
{
Console.WriteLine("Hello, World");
}
}
Ambos diseños son aceptados y correctos. Sin embargo, es importante ser consistente.
Su organización debería elegir qué diseño usar.
2- Tipo de Datos Predefinidos
Introducción
Cada vez que su aplicación deba almacenar datos temporalmente para usarlos durante la
ejecución, se almacenan en variables. Puede pensar una variable como si fuera una caja de
almacenamiento. Las cajas vienen en diferentes tamaños y formas, llamados tipos, éstos proveen
almacenamiento para varios tipos de datos. Por ejemplo, el tipo de variable usado para almacenar
un nombre es diferente al que se usa para guardar la edad de la persona.
Tipos de Datos
Los tipos predefinidos son aquellos provistos por el lenguaje C# y .NET Framework. La siguiente
tabla lista los tipos predefinidos y describe los datos que están diseñados para almacenar.
Almacenado Datos
Suponga que está escribiendo una aplicación que permite al usuario comprar ítems por Internet
con tarjeta de crédito. Su aplicación debe administrar varias piezas de información: el nombre de la
persona, el monto de compra, el número de la tarjeta de crédito y la fecha de expiración de la
tarjeta. Para representar esta información, su aplicación usa distintos tipos.
Eligiendo un tipo
Deje que el dato que está representando determine la elección del tipo. Por ejemplo, si algo puede
ser solo verdadero o falso, use bool. Decimal es una buena elección para dinero o cualquier valor
con decimales. Es preferible no usar los tipos de datos de punto flotante para no generar
problemas con los redondeos. Cuando se trabaje con enteros, un int es la elección típica, a menos
que haya una razón para elegir otro tipo.
Además de los tipos predefinidos, usted puede definir sus propios tipos para contener cualquier
dato que elija.
Variables
Una variable es un espacio de almacenamiento para un tipo en particular. Por ejemplo, si su
aplicación debe procesar un valor de dinero, requiere una variable que soporte ese valor.
Antes de usar una variable, debe declararla. Al declarar una variable, usted está reservando
espacio de almacenamiento para esa variable en memoria. Después de declarar una variable,
debe inicializarla asignándole un valor.
La sintaxis para declarar una variable es el tipo de declaración seguido del nombre de la variable.
Por ejemplo:
int miEntero;
bool archivoFueCerrado;
Nombres de variables
La siguiente lista identifica algunas buenas prácticas para nombrar variables:
Inicializando variables
Para inicializar una variable, se le asigna un valor. Para asignar un valor, usar el operador (=)
seguido del valor, y luego un punto y coma, como se muestra en el siguiente ejemplo:
int miVariable;
miVariable = 1;
int miVariable = 1;
int x = 25;
int y = 50;
bool estaAbierto = false;
sbyte b = -55;
Este código causa un error porque el compilador de C# asume que cualquier número literal con un
punto decimal es un double (tipo de dato double), a menos que se especifique que es un decimal.
Se especifica el tipo de literal agregando el sufijo, como se muestra en el siguiente ejemplo:
Los sufijos de literales que se pueden usar se muestran en la siguiente tabla. Se permiten
minúsculas:
Categoría Sufijo Descripción
Tipo Caracteres
Un carácter (tipo char) se especifica entre comillas simples:
Caracteres de Escape
Algunos caracteres no se pueden especificar usando comillas simples, por ejemplo, un carácter de
nueva línea o un beep o una comilla simple. Para representar estos caracteres, se debe usar
caracteres de escape, los cuales se muestran en la siguiente tabla:
La ventana Autos muestra las variables usadas en la sentencia actual y la próxima. Por
defecto, la ventana Autos se visualiza abajo del entorno de desarrollo cuando se encuentra en
modo debug.
5. Para pasar al próximo breakpoint, cuando esté listo de continuar ejecutando su programa,
puede presionar F5 o hacer click en Continue en el menú Debug. O puede ejecutar el
programa paso a paso presionando F11 o F10, o haciendo click en Step Over del del menú
Debug
6. Para pasar al próximo breakpoint, cuando usted esté listo
Una cadena se declara como cualquier otra variable, se asigna el tipo (string) y se le da un
nombre. Se puede asignar un valor literal a una variable string encerrando el valor entre comillas
dobles.
Hola
Mundo
Si Ud. quiere insertar una tabulación, use el carácter de escape \t, como se muestra en el siguiente
ejemplo:
Si se desea usar comillas dobles dentro de la cadena literal, se debe agregar otro par de comillas
dobles. Por ejemplo, para producir “Hola” se usa es siguiente código:
Entendiendo Unicode
El .NET Framework usa Unicode UTF-16 (Unicode Transformation Format, 16-bit encoding form)
para representar caracteres. C# también codifica caracteres usando el estándar de Unicode. El
estándar de Unicode es el mecanismo universal actual de codificación que se usa para representar
texto en el procesamiento de computación. El estándar anterior era ASCII. El estándar Unicode
representa un avance significativo sobre ASCII porque Unicode asigna un valor numérico único,
llamado punto de código, y un nombre a cada carácter que se usa en todos los lenguajes del
mundo. ASCII define solo 128 caracteres, lo que significaba que algunos lenguajes no se podían
representar correctamente en una aplicación.
Por ejemplo, el carácter “A” se representa por el código de punto “U+0041” y el nombre “LATIN
CAPITAL LETTER A”. Los valores están disponibles para más de 65.000 caracteres, y hay espacio
para soportar hasta un millón más. Para más información, ver el estándar Unicode en
www.unicode.org.
Constantes
Una constante es una variable cuyo valor no puede modificarse. Las constantes son útiles en
situaciones donde el valor que se usa tiene un significado y es fijo, como el número pi, el radio de
la Tierra, o el porcentaje de un impuesto.
Las constantes hacen su código mas legible, mantenible y robusto. Por ejemplo, si asigna el valor
6378 a la constante llamada radioTierra, cuando use este valor en cálculos es inmediatamente
aparente qué valor se está haciendo referencia, y no es posible asignarle un valor distinto por otra
persona.
Una constante se declara usando la palabra clave y el tipo. Se debe asignar un valor a la constante
en el momento de la declaración.
Ejemplos:
const int radioDeLaTierra = 6378; //km
const long distanciaAlSol = 149600000; //km
const double velocidadOrbital = 29.79D; //km seg
Enumeraciones
Una enumeración especifica un grupo de constantes. Una enumeración es un tipo definido por
usuario, lo que significa que usted puede crear una enumeración, declarar variables de ese tipo y
asignar valores a esas variables. El propósito de una enumeración es representar valores
constantes.
Además de proveer todas las ventajas de las constantes, las enumeraciones:
Hacen que su código sea más fácil de mantener asegurando que a sus variables se
asignen solamente valores anticipados.
Permiten que usted asigne nombres fácilmente identificables a sus valores, haciendo que
su código sea más fácil de leer.
Hacen que su código sea más fácil de escribir, porque se asignan valores de la
enumeración., ya que muestra una lista de posibles valores que usted puede usar.
Permiten que especifique un set de valores constantes y defina un tipo que acepte valores
solamente de ese set.
Usted crea una enumeración usando la palabra clave enum, asignando un nombre, y luego
listando los valores que su enumeración puede tomar.
Es recomendable que use la notación Pascal, para el tipo y para cada miembro de la enumeración.
En la notación Pascal, la primera letra de cada palabra del identificador se escribe con mayúscula,
como ListaDePlanetas.
Ejemplo
enum Planeta
{
Mercurio,
Venus,
Tierra,
Marte
}
El código anterior crea un nuevo tipo, Planeta. Ud. puede crear variables de este tipo y asignarles
un valor de la lista de la enumeración.
Cuando usted quiera hacer referencia a un miembro en una enumeración, use el nombre de la
enumeración, un punto y el nombre del miembro.
Por ejemplo: el siguiente código declara una variable planetaInterno de tipo Planeta, y le asigna un
valor:
Planeta planetaInterno = Planeta.Venus;
Usted puede declarar una enumeración en una clase o en un espacio de nombre, pero no dentro
de un método.
Si los miembros de su enumeración deben tener un valor específico, usted puede asignar a
miembros de una enumeración esos valores en la declaración. El siguiente código asigna el valor
del radio de cada planeta interno:
enum Planetas
{
Mercurio = 2437,
Venus = 6095,
Tierra = 6378
}
Usted puede usar cualquier entero como tipo base que se usará para la enumeración
especificando el tipo luego del nombre de la enumeración. Por ejemplo:
Conversión de Datos
Cuando se diseña aplicaciones, a menudo se debe convertir un dato de un tipo a otro. La
conversión puede ser necesaria cuando se realizan operaciones con dos tipos distintos.
Por ejemplo, cuando se ingresa un valor numérico en una página web, el tipo de dato puede ser
texto. Un programador debe entonces convertir ese texto a un tipo numérico.
Otra razón para convertir es evitar el desbordamiento (overflow). Si usted trata de sumar dos bytes,
el compilador retorna un int. Retorna un int porque el byte puede mantener solo 8 bits, hasta un
valor de 255, entonces el resultado de sumar dos bytes podría resultar fácilmente en un número
mayor de 255 (int=byte+byte). Por esta razón, el valor resultante de la suma es convertido por el
compilador y devuelto como un int.
Hay dos tipos de conversiones en el .NET Framework: implícitas y explícitas.
Una conversión implícita es automáticamente realizada por la CLR (Common Language
Runtime) sobre operaciones que garantizan no truncar información.
En una conversión explícita se solicita explícitamente al compilador a realizar una
conversión, que de otra forma podría perder información o produciría un error.
Conversiones implícitas
La siguiente tabla muestra los tipos de conversión implícita que soporta C#:
De A
Sbyte short, int, long, float, double, decimal
Byte short, ushort, int, uint, long, ulong, float, double, decimal
Short int, long, float, double, decimal
Ushort int, uint, long, ulong, float, double, decimal
Int long, float, double, decimal
Uint long, ulong, float, double, decimal
long, ulong float, double, decimal
Float Double
Char ushort, int, uint, long, ulong, float, double, decimal
Notar que las conversiones implícitas pueden ser realizadas desde un tipo pequeño a otro más
grande o desde un entero sin signo a un entero con signo.
Ejemplo
El siguiente ejemplo muestra una conversión implícita:
Conversión explícita
La sintaxis para realizar una conversión explícita se muestra en el siguiente código:
El tipo entre paréntesis indica al compilador que el valor de la derecha (variable2) es convertido al
tipo que está especificado entre paréntesis.
Ejemplo
El siguiente ejemplo muestra una conversión explícita:
int x = 500;
short z = (short) x;
// conversión explícita a un short, z contiene el valor 500
Es importante recordar que las conversiones explícitas pueden resultar en pérdida de datos o
generar errores si los tipos de datos o los valores asignados no son compatibles. Por ejemplo, en
el siguiente código, un decimal es explícitamente convertido a un int:
decimal d = 1234.56M;
int x = (int) d;
Otras conversiones
La biblioteca de clases de .NET Framework provee un soporte para tipos de conversiones en la
clase System.Convert.
int x = 500;
short z = System.Convert.ToInt16(x);
Expresiones y Operadores
El propósito de escribir una expresión es realizar una acción y retornar un valor. Por ejemplo, usted
puede escribir una expresión para hacer un cálculo matemático, asignar un valor o comparar dos
valores:
Una expresión es una secuencia de operadores y operandos. Un operador es un símbolo
determinador que indica la acción que usted quiere que ocurra en su expresión. Un operando es el
valor sobre el cual la operación es realizada. Un operador está específicamente diseñado para
producir un nuevo valor en base al operando.
Tipos de operadores:
Aritméticos: Usados para realizar cálculos aritméticos como la suma.
De Comparación: Usados para comparar si un valor es mayor, mayor o igual, menor,
menor o igual a otro.
Lógicos: Usados para definir situaciones and/or.
Condicional: Usado para realizar una sentencia if.
De Asignación: Usado para asignar un valor a una variable.
La mayoría de los operadores solamente se usan con datos numéricos, pero otros también se usan
para cadenas.
La siguiente tabla lista todos los operadores que se pueden usar en C#:
Tipo de Operador
Operador
Primario (x), x.y, f(x), a[x], x++, x--, new, typeof, sizeof, checked,unchecked
Unario +, -, !, ~, ++x, --x, (T)x
Matemático + , - ,*, /, %
Desplazamiento << , >>
Comparación < , > , <= , >= , is
Igualdad ==
Lógico &,|,^
Condicional && , || , ?
Asignación = , *= , /= , %= , += , -= , <<=, >>= , &= , ^= , |=
Nota
Es importante notar la diferencia entre el operador de asignación y el operador de igualdad. Notar
que “es igual a” se representa con dos signos igual (==) porque un solo signo (=) se usa para
asignar un valor.
int x = 10;
// asignación
int y = 20;
int z = x + y;
// (z == 30) z es igual a 30?
C# hace posible usar una sintaxis concisa para manipular datos en forma compleja. La siguiente
tabla muestra cómo realizar operaciones en una forma más corta.
Ejemplo 1
int x = 5;
(++x == 6) // verdadero o falso?
La respuesta es “verdadero”.
Ejemplo 2
x = 5
(x++ == 6) // // verdadero o falso?
La respuesta es “falso”.
Ejemplo 3
int x = 10
int y = x++; // y es igual a 10
int z = x + y; // z es igual a 21
Negación lógica
El operador de negación lógica es un signo de admiración (!). Se usa para revertir el valor de un
tipo bool.
Por ejemplo:
bool estaAbierto = true;
bool estaCerrado = !estaAbierto;
Operadores matemáticos
Además de los operadores obvios + - * y /, existe el operador de resto (%) que devuelve el resto de
una división. Por ejemplo:
int x = 20 % 7;
// x == 6
Operadores lógicos
C# provee operadores lógicos, como se muestra en la siguiente tabla:
Los desarrolladores a menudo usan los operadores lógicos condicionales. Estos operadores
siguen las mismas reglas que los operadores booleanos pero tienen la característica que solo son
evaluados si es necesario.
string a = "semi";
string b = "circulo";
string c = a + b;
string d = "cuadrado";
Precedencia de Operadores
Los desarrolladores a menudo crean expresiones que realizan más de un cálculo, comparación o
una combinación de ambos. En estas situaciones, la precedencia de los operadores controla el
orden en el cual se evalúan las expresiones. Si se desea que las operaciones se realicen en un
orden diferente, se debe indicar al compilador el orden usando paréntesis.
Por ejemplo, el operador mas (+) tiene una precedencia más baja que el operador de multiplicación
(*), entonces a + b * c significa multiplicar b * c y luego sumar a.
a=b*c+d
Usando paréntesis, en la siguiente expresión, el compilador primero evalúa lo que está entre
paréntesis, (c + d), y luego multiplica por b.
a = b * (c + d)
Los siguientes ejemplos demuestran la precedencia de los operadores y el uso de paréntesis para
controlar el orden de la evaluación.
10 + 20 / 5 (es reultado es 14)
(10 + 20) / 5 (es reultado es 6)
10 + ( 20 / 5 ) (es reultado es 14)
((10 + 20) * 5) + 2 (es reultado es 152)
Asociatividad
Todos los operadores binarios, aquellos que necesitan dos operandos, son asociativos a izquierda,
es decir, que la expresión se evalúa de izquierda a derecha, excepto por los operadores de
asignación. Los operadores de asignación y condicionales son asociativos a derecha.
Por ejemplo:
x + y + z se evalúa como (x + y) + z
x = y = z se evalúa como x = (y = z)
Matrices (Arrays)
Una matriz es una estructura de datos que contiene varias variables del mismo tipo. Una matriz se
declara con un tipo:
type[] arrayName;
Ejemplos:
int[] array1 = new int [5];
int[] array2 = new int [] { 1, 3, 5, 7, 9 };
int[] array3 = { 1, 2, 3, 4, 5, 6 };
Cuando una expresión que se está evaluando es verdadera, el código siguiente a la sentencia if
será ejecutada.
Por ejemplo:
if ( ventas > 10000 ) {
bono += 100;
}
else {
bono = 0;
}
Se puede usar else if para evaluar varias condiciones dentro de la misma sentencia
Se puede evaluar más de una expresión en una sentencia. Por ejemplo, las expresiones que
siguen a la sentencia if se evalúan como verdaderas si ventas es mayor a 10000 pero menor a
500000:
Usando el ternario
El operator ternario (?) es una forma corta de la sentencia if...else. Es útil cuando se desea realizar
una comparación y retornar un valor booleano.
Por ejemplo, la siguiente expresión asigna el valor 0 al bono si el valor de ventas es menor a
10000:
Sentencia switch
Una sentencia switch selecciona el código a ejecutar basándose en el valor de una expresión. Las
sentencias switch son útiles para seleccionar una rama de ejecución de una lista de opciones
mutualmente exclusivas. Usar sentencias switch hacen su aplicación más eficiente y su código más
legible que si se usa sentencias if anidadas.
Una sentencia switch toma la forma de una expresión seguida de bloques de opciones, indicando
los casos. Cuando la expresión en el argumento equivale al valor de uno de los casos, el código
que sigue a ese caso es ejecutado. Cuando no equivale a ningún caso, se ejecuta el caso por
defecto (default), si es que hay uno definido.
Se debe incluir una sentencia break al final de cada bloque de opción para que no se produzca un
error de compilación (siempre que exista código en ese caso).
Ejemplo:
La siguiente sentencia switch asume que x es un entero.
switch (x)
{
case 0:
// x is 0
break;
case 1:
// x is 1
break;
case 2:
// x is 2
break;
}
Default: Si lo desea se puede definir una condición para aquellos valores que no son manejados en
ninguno de los casos.
El siguiente ejemplo muestra cómo definir una condición por defecto.
switch (x)
{
case 0:
// x is 0
break;
case 1:
// x is 1
break;
case 2:
// x is 2
break;
default:
// x no es 0, 1 o 2
break;
}
El caso por defecto maneja cualquier valor que no esté contemplado en los casos.
Sentencias iterativas
C# provee varios mecanismos de iteración, lo cual le permite ejecutar un bloque de código
repetidas veces hasta que se cumple una cierta condición. En todos los casos una sentencia se
ejecuta hasta que una expresión booleana se hace verdadera.
Sentencia for
Una iteración for se usa para ejecutar un código un cierto número de veces. Se usa un for cuando
se conoce por adelantado el número de veces que quiere repetir la ejecución de un código. Por
ejemplo, suponga que desea saber el monto de una cuenta bancaria de ahorros luego de 10 años,
y desea saber el total que tendrá al finalizar cada año. Una forma es escribir la sentencia cuenta *=
interés 10 veces, o usar una iteración.
Ejemplo
Esta estructura es muy flexible. Por ejemplo, el contador de iteraciones puede ser incrementado o
decrementado en cada iteración. En este caso, es necesario conocer la cantidad de iteraciones.
Las sentencias inicialización e iteración pueden contener más una variable local, como se muestra
en el siguiente ejemplo:
Sentencia while
Tal como en el caso del for, la iteración while evalúa la condición antes de ejecutar el código. Se
usa cuando no se conoce exactamente cuántas veces debe iterar.
while (condición) {
// sentencias;
}
Ejemplo
Sentencia do
En una iteración do, se ejecutan las sentencias del do, se evalúa la condición y si es verdadera, se
ejecutan las sentencias nuevamente. Es útil cuando se desea ejecutar el código del cliclo al menos
una vez.
do {
// sentencias que se ejecutan al menos 1 vez
} while (expresión booleana);
Ejemplo
En el siguiente ejemplo, se usa un do para escribir números del 1 al 10 en una columna: int i = 1;
do {
Console.WriteLine("{0}", i++);
} while ( i <= 10)
Control de Excepciones
C# incorpora mecanismos para el tratamiento de excepciones, que pueden producirse durante la
ejecución de un programa.
La instrucción try-catch consta de un bloque try seguido de una o más cláusulas catch, las cuales
especifican controladores para diferentes excepciones. Cuando se produce una excepción,
Common Language Runtime (CLR) busca la instrucción catch que controla esta excepción. Si el
método que se está ejecutando actualmente no contiene un bloque catch de este tipo, CLR
examina el método que llamó al método actual y así sucesivamente en la pila de llamadas. Si no se
encuentra ningún bloque catch, CLR muestra al usuario un mensaje de excepción no controlada y
detiene la ejecución del programa.
El bloque try contiene el código protegido que puede causar la excepción. Este bloque se ejecuta
hasta que se produce una excepción o hasta completarse satisfactoriamente.
El bloque finally es útil para limpiar cualquier recurso asignado en el bloque try, así como también
para ejecutar cualquier código que deba ejecutarse incluso si hay una excepción. El control se
transfiere siempre al bloque finally independientemente de cómo finalice el bloque try.
Los objetos de excepción que describen un error se crean y, a continuación, se producen con la
palabra clave throw.
return x / y;
}