33
Ediciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

Embed Size (px)

Citation preview

Page 1: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

Ediciones ENI

C# 6 y Visual Studio 2015 Los fundamentos del lenguaje

Colección Recursos Informáticos

Contenido

Page 2: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

1Contenido

Prólogo

Capítulo 1

La plataforma .NET

1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2. Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3. El Common Language Runtime (CLR) . . . . . . . . . . . . . . . . . . . . . . . . 22

4. La Base Class Library (BCL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

5. El Dynamic Language Runtime (DLR) . . . . . . . . . . . . . . . . . . . . . . . . 25

6. Evolución de la plataforma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266.1 .NET Core . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276.2 .NET Compiler Platform: Roslyn . . . . . . . . . . . . . . . . . . . . . . . . 286.3 .NET en el mundo open source . . . . . . . . . . . . . . . . . . . . . . . . . . 28

7. Una primera aplicación con Visual C# . . . . . . . . . . . . . . . . . . . . . . . . 297.1 Creación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297.2 Compilación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317.3 Análisis del ensamblado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

7.3.1 Estructura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337.3.2 Exploración con ILDASM. . . . . . . . . . . . . . . . . . . . . . . . . 34

Podrá descargar algunos elementos de este libro en la página web de Ediciones ENI: http://www.ediciones-eni.com.

Escriba la referencia ENI del libro RIT15CSHA en la zona de búsqueda y valide. Haga clic en el título y después en el botón de descarga.

Page 3: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

2Los fundamentos del lenguaje

C# 6 y Visual Studio 2015

Capítulo 2

Visual Studio 2015

1. Instalación y primera ejecución. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391.1 Requisitos previos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391.2 Ediciones de Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

1.2.1 Visual Studio Express . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411.2.2 Visual Studio Community . . . . . . . . . . . . . . . . . . . . . . . . 421.2.3 Ediciones comerciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

1.3 Instalación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431.4 Primera ejecución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

2. Descripción de las herramientas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542.1 Barras de herramientas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592.2 Explorador de soluciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602.3 Examinador de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612.4 Explorador de servidores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622.5 Ventana de propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652.6 Ventana de edición de código . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

2.6.1 Navegación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682.6.2 Seguimiento de las modificaciones . . . . . . . . . . . . . . . . . 682.6.3 Resaltar referencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692.6.4 Refactorización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702.6.5 IntelliSense . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722.6.6 Snippets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

Capítulo 3

La organización de una aplicación

1. Las soluciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751.1 Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751.2 Creación de una solución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 761.3 Organización. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

Page 4: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

3Contenido

1.4 Acciones disponibles para una solución . . . . . . . . . . . . . . . . . . . 781.4.1 Agregar y eliminar un proyecto . . . . . . . . . . . . . . . . . . . . 781.4.2 Creación de una carpeta de soluciones . . . . . . . . . . . . . . 791.4.3 Carga y descarga de un proyecto . . . . . . . . . . . . . . . . . . . 801.4.4 Creación de un archivo . . . . . . . . . . . . . . . . . . . . . . . . . . . 811.4.5 Compilar la solución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

1.5 Configuración de la solución . . . . . . . . . . . . . . . . . . . . . . . . . . . . 821.5.1 Establecer proyectos de inicio. . . . . . . . . . . . . . . . . . . . . . 821.5.2 Dependencias del proyecto. . . . . . . . . . . . . . . . . . . . . . . . 841.5.3 Configuración de análisis de código. . . . . . . . . . . . . . . . . 851.5.4 Depurar archivos de código fuente . . . . . . . . . . . . . . . . . 861.5.5 Configuración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

2. Los proyectos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 882.1 Creación de un proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 882.2 Propiedades de un proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

2.2.1 Aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 972.2.2 Compilar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1002.2.3 Eventos de compilación . . . . . . . . . . . . . . . . . . . . . . . . . 1032.2.4 Depurar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1052.2.5 Recursos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1062.2.6 Parámetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

Capítulo 4

Las bases del lenguaje

1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

2. Las variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1092.1 Nomenclatura de las variables . . . . . . . . . . . . . . . . . . . . . . . . . . 1102.2 Tipo de las variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

2.2.1 Tipos valor y tipos referencia . . . . . . . . . . . . . . . . . . . . . 1112.2.2 Tipos integrados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

2.3 Declaración de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1162.4 Ámbito de las variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116

Page 5: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

4Los fundamentos del lenguaje

C# 6 y Visual Studio 2015

2.5 Modificadores de acceso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1172.6 La palabra clave var y la inferencia de tipo . . . . . . . . . . . . . . . . 118

3. Las constantes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

4. Los operadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1194.1 Los operadores de acceso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

4.1.1 Acceso simple: . (punto) . . . . . . . . . . . . . . . . . . . . . . . . . 1204.1.2 Acceso indexado: [ ] . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1204.1.3 Acceso con nulidad condicional: ? . . . . . . . . . . . . . . . . . 120

4.2 Los operadores aritméticos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1214.3 Los operadores de comparación . . . . . . . . . . . . . . . . . . . . . . . . . 1224.4 Los operadores condicionales . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

4.4.1 Operador ternario: ? ... : . . . . . . . . . . . . . . . . . . . . . . . . . 1224.4.2 Operador de fusión de valor nulo: ?? . . . . . . . . . . . . . . . 123

4.5 Los operadores lógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1244.5.1 Negación: !. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1244.5.2 Y lógico: &. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1244.5.3 O lógico: | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1244.5.4 O exclusivo: ^ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1254.5.5 Y condicional: && . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1254.5.6 O condicional: || . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

4.6 Los operadores binarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1264.6.1 Y binario: &. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1264.6.2 O binario: | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1264.6.3 O exclusivo: ^ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1274.6.4 Negación: ~. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1274.6.5 Desplazar a la derecha: >> . . . . . . . . . . . . . . . . . . . . . . 1274.6.6 Desplazar a la izquierda: << . . . . . . . . . . . . . . . . . . . . . 128

5. Las estructuras de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1285.1 Las estructuras condicionales. . . . . . . . . . . . . . . . . . . . . . . . . . . 128

5.1.1 if ... else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1285.1.2 switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

Page 6: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

5Contenido

5.2 Las estructuras de iteración . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1315.2.1 for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1315.2.2 while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1325.2.3 do ... while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1335.2.4 foreach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1335.2.5 Controlar la ejecución de un bucle. . . . . . . . . . . . . . . . . 134

5.3 Otras estructuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1355.3.1 using. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1355.3.2 goto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

6. Las funciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1376.1 Escritura de una función . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1376.2 Parámetros de función . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1396.3 Procedimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1436.4 Sobrecargas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

7. Los atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

Capítulo 5

Programación orientada a objetos con C#

1. Principios de la programación orientada a objetos . . . . . . . . . . . . . . 147

2. Clases y estructuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1502.1 Clases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

2.1.1 Declaración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1512.1.2 Constructor y destructor . . . . . . . . . . . . . . . . . . . . . . . . 1532.1.3 Clases parciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

2.2 Estructuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1582.3 Creación de un método . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

2.3.1 Creación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1592.3.2 Métodos parciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1612.3.3 Métodos de extensión. . . . . . . . . . . . . . . . . . . . . . . . . . . 1622.3.4 Métodos operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

Page 7: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

6Los fundamentos del lenguaje

C# 6 y Visual Studio 2015

2.4 Creación de propiedades. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1652.4.1 Lectura y escritura. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1652.4.2 Solo lectura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1662.4.3 Solo escritura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1672.4.4 Propiedades automáticas . . . . . . . . . . . . . . . . . . . . . . . . 1672.4.5 Inicialización de propiedades automáticas . . . . . . . . . . 1682.4.6 Propiedades automáticas de solo lectura . . . . . . . . . . . . 1682.4.7 Propiedades indexadas . . . . . . . . . . . . . . . . . . . . . . . . . . 169

2.5 Miembros estáticos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1702.6 Uso de clases y estructuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

2.6.1 Instanciación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1712.6.2 Inicialización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1722.6.3 Tipos anónimos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173

3. Los espacios de nombres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1763.1 Nomenclatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1763.2 using . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

4. La herencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1794.1 Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1794.2 Las palabras clave this y base. . . . . . . . . . . . . . . . . . . . . . . . . . . 1804.3 Sobrecarga y ocultación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

4.3.1 Sobrecarga de métodos . . . . . . . . . . . . . . . . . . . . . . . . . . 1824.3.2 Ocultación de métodos. . . . . . . . . . . . . . . . . . . . . . . . . . 1834.3.3 Diferencias entre sobrecarga y ocultación . . . . . . . . . . . 183

4.4 Imponer o prohibir la herencia . . . . . . . . . . . . . . . . . . . . . . . . . 1864.5 La conversión de tipo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187

5. Las interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1905.1 Creación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1905.2 Uso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

5.2.1 Implementación implícita . . . . . . . . . . . . . . . . . . . . . . . 1925.2.2 Implementación explícita. . . . . . . . . . . . . . . . . . . . . . . . 194

6. Las enumeraciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

Page 8: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

7Contenido

7. Los delegados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1967.1 Creación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1977.2 Uso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1977.3 Expresiones lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

8. Los eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1998.1 Declaración y producción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1998.2 Gestión de los eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201

9. Los genéricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2029.1 Clases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

9.1.1 Definición de una clase genérica . . . . . . . . . . . . . . . . . . 2039.1.2 Uso de una clase genérica . . . . . . . . . . . . . . . . . . . . . . . . 204

9.2 Interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2049.2.1 Definición de una interfaz genérica . . . . . . . . . . . . . . . . 2049.2.2 Uso de una interfaz genérica . . . . . . . . . . . . . . . . . . . . . 205

9.3 Restricciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2079.4 Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

9.4.1 Definición de un método genérico . . . . . . . . . . . . . . . . . 2109.4.2 Uso de un método genérico . . . . . . . . . . . . . . . . . . . . . . 211

9.5 Eventos y delegados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

10. Las colecciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21310.1 Tipos existentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213

10.1.1 Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21410.1.2 ArrayList y List<T>. . . . . . . . . . . . . . . . . . . . . . . . . . . . 21410.1.3 Hashtable y Dictionary<TKey, TValue> . . . . . . . . . . 21810.1.4 Stack y Stack<T> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22110.1.5 Queue y Queue<T> . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

10.2 Seleccionar un tipo de colección . . . . . . . . . . . . . . . . . . . . . . . . 222

11. Programación dinámica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

12. Programación asíncrona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22512.1 Los objetos Task . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22512.2 Escribir código asíncrono con async y await . . . . . . . . . . . . . . 228

Page 9: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

8Los fundamentos del lenguaje

C# 6 y Visual Studio 2015

Capítulo 6

Depuración y gestión de errores

1. Los distintos tipos de errores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2311.1 Errores de compilación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2311.2 Errores de ejecución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233

2. Uso de excepciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2342.1 Creación y generación de excepciones . . . . . . . . . . . . . . . . . . . 234

2.1.1 La clase Exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2342.1.2 La palabra clave throw . . . . . . . . . . . . . . . . . . . . . . . . . . 2352.1.3 Excepciones especializadas . . . . . . . . . . . . . . . . . . . . . . . 235

2.2 Gestionar las excepciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2362.2.1 La estructura try ... catch . . . . . . . . . . . . . . . . . . . . . . . . 2372.2.2 Los filtros de excepción. . . . . . . . . . . . . . . . . . . . . . . . . . 2392.2.3 El bloque finally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240

3. Las herramientas proporcionadas por Visual Studio . . . . . . . . . . . . 2423.1 Control de la ejecución. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

3.1.1 Arranque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2433.1.2 Detención . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2443.1.3 Pausa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2443.1.4 Reanudar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245

3.2 Puntos de interrupción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2453.3 Visualizar el contenido de las variables . . . . . . . . . . . . . . . . . . . 252

3.3.1 DataTips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2523.3.2 Ventanas de inspección . . . . . . . . . . . . . . . . . . . . . . . . . 2533.3.3 Ventana de inspección rápida. . . . . . . . . . . . . . . . . . . . . 2543.3.4 Ventana de variables locales . . . . . . . . . . . . . . . . . . . . . . 256

3.4 Compilación condicional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256

Page 10: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

9Contenido

Capítulo 7

Desarrollo de aplicaciones Windows

1. Presentación de WPF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2591.1 Estructura de una aplicación WPF. . . . . . . . . . . . . . . . . . . . . . . 2601.2 XAML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261

1.2.1 Plantillas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2631.2.2 Espacios de nombres . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264

1.3 Contexto de datos y binding . . . . . . . . . . . . . . . . . . . . . . . . . . . 265

2. Uso de controles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2692.1 Agregar controles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2692.2 Posición y dimensionamiento de controles. . . . . . . . . . . . . . . . 2732.3 Agregar un controlador de eventos a un control . . . . . . . . . . . 276

3. Los principales controles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2783.1 Controles de ventanas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279

3.1.1 Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2793.1.2 NavigationWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282

3.2 Controles de diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2843.2.1 Grid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2843.2.2 StackPanel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2873.2.3 DockPanel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2873.2.4 WrapPanel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2893.2.5 Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291

3.3 Controles de representación de datos . . . . . . . . . . . . . . . . . . . . 2923.3.1 TextBlock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2923.3.2 Label . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2933.3.3 Image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2943.3.4 ScrollViewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2953.3.5 ItemsControl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2963.3.6 StatusBar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2993.3.7 ToolTip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300

Page 11: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

10Los fundamentos del lenguaje

C# 6 y Visual Studio 2015

3.4 Controles de edición de texto . . . . . . . . . . . . . . . . . . . . . . . . . . 3013.4.1 TextBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3013.4.2 RichTextBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3013.4.3 PasswordBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

3.5 Controles de selección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3043.5.1 RadioButton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3043.5.2 CheckBox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3053.5.3 ComboBox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3053.5.4 ListBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3063.5.5 ListView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3073.5.6 TreeView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3103.5.7 Slider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3153.5.8 Calendar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3153.5.9 DatePicker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316

3.6 Controles de acción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3163.6.1 Button . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3173.6.2 Menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3173.6.3 ContextMenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3203.6.4 ToolBar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320

4. Interacciones de teclado y de ratón . . . . . . . . . . . . . . . . . . . . . . . . . . 3224.1 Eventos de teclado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3224.2 Eventos de ratón . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3244.3 Arrastrar y colocar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326

5. Ir más allá con WPF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3295.1 Introducción al uso de Blend . . . . . . . . . . . . . . . . . . . . . . . . . . . 330

5.1.1 La interfaz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3305.1.2 Agregar y modificar controles visuales . . . . . . . . . . . . . 338

5.2 Introducción a MVVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3405.2.1 Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3415.2.2 Las interfaces INotifyPropertyChanged

e INotifyCollectionChanged . . . . . . . . . . . . . . . . . . . . . 3415.2.3 Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3425.2.4 Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343

Page 12: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

11Contenido

Capítulo 8

Acceso a datos

1. Principios de una base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3591.1 Terminología. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3591.2 El lenguaje SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360

1.2.1 Búsqueda de registros . . . . . . . . . . . . . . . . . . . . . . . . . . . 3611.2.2 Agregar registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3631.2.3 Actualización de información . . . . . . . . . . . . . . . . . . . . 3631.2.4 Eliminar información . . . . . . . . . . . . . . . . . . . . . . . . . . . 364

2. ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3642.1 Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3642.2 Los proveedores de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365

2.2.1 SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3662.2.2 Oracle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3662.2.3 OLE DB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3672.2.4 ODBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367

3. Utilizar ADO.NET en modo conectado . . . . . . . . . . . . . . . . . . . . . . 3683.1 Conexión a una base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . 368

3.1.1 Cadenas de conexión . . . . . . . . . . . . . . . . . . . . . . . . . . . 3683.1.2 Pool de conexiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3713.1.3 Gestión de la conexión . . . . . . . . . . . . . . . . . . . . . . . . . . 373

3.2 Creación y ejecución de comandos . . . . . . . . . . . . . . . . . . . . . . 3753.2.1 Definición y creación de un comando . . . . . . . . . . . . . . 3753.2.2 Selección de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3763.2.3 Acciones sobre los datos . . . . . . . . . . . . . . . . . . . . . . . . . 3773.2.4 Parametrización de un comando . . . . . . . . . . . . . . . . . . 3783.2.5 Ejecución de procedimientos almacenados . . . . . . . . . . 381

4. Utilizar ADO.NET en modo desconectado . . . . . . . . . . . . . . . . . . . 3824.1 DataSet y DataTable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383

4.1.1 Descripción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3834.1.2 Llenar un DataSet a partir de una base de datos. . . . . . 3844.1.3 Llenar un DataSet sin base de datos . . . . . . . . . . . . . . . 387

Page 13: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

12Los fundamentos del lenguaje

C# 6 y Visual Studio 2015

4.2 Manipulación de datos sin conexión. . . . . . . . . . . . . . . . . . . . . 3904.2.1 Lectura de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3904.2.2 Creación de restricciones . . . . . . . . . . . . . . . . . . . . . . . . 3914.2.3 Relaciones entre DataTables . . . . . . . . . . . . . . . . . . . . . 3944.2.4 Estado y versiones de un DataRow . . . . . . . . . . . . . . . . 3964.2.5 Modificación de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . 3984.2.6 Eliminación de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . 3994.2.7 Validar o anular las modificaciones . . . . . . . . . . . . . . . . 3994.2.8 Filtrado y ordenación mediante un DataView . . . . . . . 4004.2.9 Búsqueda de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403

4.3 Validar las modificaciones en la base de datos . . . . . . . . . . . . . 4054.3.1 Generar los comandos de actualización

automáticamente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4064.3.2 Comandos de actualización personalizados . . . . . . . . . 4084.3.3 Gestión de los accesos concurrentes . . . . . . . . . . . . . . . 408

5. Utilizar las transacciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411

Capítulo 9

LINQ

1. Presentación de LINQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415

2. Sintaxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4162.1 Una primera consulta LINQ . . . . . . . . . . . . . . . . . . . . . . . . . . . 4192.2 Los operadores de consulta . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421

2.2.1 Proyección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4222.2.2 Filtrado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4242.2.3 Ordenación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4252.2.4 Particionado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4272.2.5 Unión y agrupación . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4282.2.6 Agregación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431

Page 14: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

13Contenido

3. LINQ to SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4323.1 El mapeo objeto-relacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433

3.1.1 Uso de SQLMetal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4333.1.2 Uso del diseñador objeto/relacional. . . . . . . . . . . . . . . . 440

3.2 Uso de LINQ to SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4493.2.1 Recuperación de datos . . . . . . . . . . . . . . . . . . . . . . . . . . 4493.2.2 Actualización de datos . . . . . . . . . . . . . . . . . . . . . . . . . . 4513.2.3 Gestión de conflictos . . . . . . . . . . . . . . . . . . . . . . . . . . . 453

Capítulo 10

XML

1. Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457

2. Estructura de un archivo XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4582.1 Componentes de un documento XML . . . . . . . . . . . . . . . . . . . 4582.2 Documento bien formado y documento válido . . . . . . . . . . . . 462

3. Manipular un documento XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4633.1 Uso de DOM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4643.2 Uso de XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4693.3 Uso de LINQ to XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472

Capítulo 11

Despliegue

1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477

2. Windows Installer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4782.1 Instalación de InstallShield Limited Edition. . . . . . . . . . . . . . . 4792.2 Creación de un proyecto de instalación . . . . . . . . . . . . . . . . . . 481

2.2.1 Información relativa a la aplicación. . . . . . . . . . . . . . . . 4822.2.2 Requisitos previos de instalación . . . . . . . . . . . . . . . . . . 4832.2.3 Archivos de la aplicación . . . . . . . . . . . . . . . . . . . . . . . . 4842.2.4 Accesos directos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4872.2.5 Valores del registro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488

Page 15: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

14Los fundamentos del lenguaje

C# 6 y Visual Studio 2015

2.2.6 Cuadros de diálogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489

3. ClickOnce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4903.1 La tecnología ClickOnce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490

3.1.1 Principios de funcionamiento. . . . . . . . . . . . . . . . . . . . . 4913.1.2 Métodos de despliegue disponibles . . . . . . . . . . . . . . . . 4913.1.3 Actualización de aplicaciones con ClickOnce . . . . . . . . 493

3.2 La publicación ClickOnce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494

Glosario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503

Índice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523

Page 16: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

Ediciones ENI

C# 6 Desarrolle aplicaciones Windows

con Visual Studio 2015

Colección Expert IT

Contenido

Page 17: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

1Contenido

Prólogo

Capítulo 1

Trabajar con Visual Studio 2015

1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2. La interfaz de desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.1 El editor de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.2 El diseñador de vistas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.3 El depurador integrado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.4 El administrador de extensiones . . . . . . . . . . . . . . . . . . . . . . . . . 242.5 NuGet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262.6 Ventanas personalizadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

3. La creación de soluciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283.1 Definir el punto de entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293.2 La diferencia entre proyectos y soluciones . . . . . . . . . . . . . . . . . 303.3 Configurar el proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313.4 La conversión de soluciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343.5 Los proyectos compartidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343.6 Las herramientas de refactorización . . . . . . . . . . . . . . . . . . . . . . 35

Podrá descargar algunos elementos de este libro en la página web de Ediciones ENI: http://www.ediciones-eni.com.

Escriba la referencia ENI del libro EIT6C15VIS en la zona de búsqueda y valide. Haga clic en el título y después en el vínculo de descarga.

Page 18: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

2Desarrolle aplicaciones Windows con Visual Studio 2015

C# 6

Capítulo 2

La arquitectura .NET

1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

2. CLR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

3. Las bibliotecas de clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

4. Los tipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424.1 Los tipos por valor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434.2 Los tipos por referencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

Capítulo 3

Introducción al lenguaje C#

1. La sintaxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471.1 Los identificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471.2 Las palabras reservadas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471.3 La reglas de puntuación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491.4 Los operadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

1.4.1 Los operadores de cálculo . . . . . . . . . . . . . . . . . . . . . . . . . . 501.4.2 Los operadores de asignación . . . . . . . . . . . . . . . . . . . . . . . 501.4.3 Los operadores de comparación . . . . . . . . . . . . . . . . . . . . . 51

1.5 La declaración de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521.6 Las instrucciones de control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

1.6.1 Las instrucciones condicionales . . . . . . . . . . . . . . . . . . . . . 531.6.2 Las instrucciones iterativas . . . . . . . . . . . . . . . . . . . . . . . . 571.6.3 Las instrucciones de salto. . . . . . . . . . . . . . . . . . . . . . . . . . 60

1.7 Los comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

2. Los espacios de nombres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652.1 La palabra reservada using . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652.2 La palabra reservada alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662.3 Las clases estáticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

Page 19: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

3Contenido

3. Los tipos básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673.1 Los tipos numéricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

3.1.1 Los enteros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683.1.2 Los decimales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

3.2 Los booleanos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693.3 Las cadenas de caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693.4 Los tipos null . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713.5 La conversión de tipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

3.5.1 La conversión implícita . . . . . . . . . . . . . . . . . . . . . . . . . . . 723.5.2 La conversión explícita . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

4. Las constantes y las enumeraciones . . . . . . . . . . . . . . . . . . . . . . . . . . 734.1 Las constantes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744.2 Las enumeraciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

5. Los arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

6. Las colecciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

7. Las directivas preprocesador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

Capítulo 4

La creación de tipos

1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

2. Los niveles de acceso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

3. Las estructuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

4. Las clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 864.1 Los campos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 864.2 Las propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 874.3 Los métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

4.3.1 La sobrecarga. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914.3.2 Los parámetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

4.4 Los constructores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 984.5 Los destructores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 994.6 Las clases y miembros estáticos . . . . . . . . . . . . . . . . . . . . . . . . . . 99

Page 20: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

4Desarrolle aplicaciones Windows con Visual Studio 2015

C# 6

4.7 Las clases parciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004.8 La palabra reservada this . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1014.9 Los indexadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1024.10 La sobrecarga de operadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

4.10.1Los operadores aritméticos. . . . . . . . . . . . . . . . . . . . . . . . 1044.10.2Los operadores de comparación . . . . . . . . . . . . . . . . . . . . 106

Capítulo 5

La herencia

1. La herencia de clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1091.1 Implementar la herencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1091.2 Los miembros virtuales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1111.3 Ocultar los miembros heredados . . . . . . . . . . . . . . . . . . . . . . . . 1111.4 La palabra reservada base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1121.5 Las clases y miembros abstractos . . . . . . . . . . . . . . . . . . . . . . . 1131.6 Las clases y los métodos cerrados . . . . . . . . . . . . . . . . . . . . . . . 1141.7 Los constructores derivados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1151.8 El polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

2. Las interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1192.1 La implementación de interfaces . . . . . . . . . . . . . . . . . . . . . . . . 1192.2 El polimorfismo de interfaz . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1212.3 La herencia de interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

Capítulo 6

Tipos genéricos

1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

2. La creación de tipos genéricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

3. Las restricciones de tipo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

Page 21: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

5Contenido

4. Las interfaces genéricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1294.1 La varianza en las interfaces genéricas . . . . . . . . . . . . . . . . . . . 130

4.1.1 La covarianza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1304.1.2 La contravarianza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

4.2 La creación de interfaces genéricas variantes . . . . . . . . . . . . . . 1324.3 La herencia de interfaces genéricas variantes . . . . . . . . . . . . . . 133

5. La creación de métodos genéricos . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

6. Valor por defecto genérico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

7. La herencia de clase genérica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

Capítulo 7

Delegados, eventos y expresiones lambda

1. Los delegados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1391.1 Los parámetros de método . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1401.2 Los métodos de destino múltiples . . . . . . . . . . . . . . . . . . . . . . . 1411.3 Los delegados genéricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1421.4 La compatibilidad de los delegados . . . . . . . . . . . . . . . . . . . . . . 142

2. Los eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

3. Las expresiones lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1473.1 El uso de las expresiones lambda . . . . . . . . . . . . . . . . . . . . . . . . 1483.2 Los delegados genéricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1493.3 La captura de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149

Capítulo 8

Creación de formularios

1. Utilizar los formularios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1531.1 Añadir formularios al proyecto . . . . . . . . . . . . . . . . . . . . . . . . . 1531.2 Modificar el formulario de inicio . . . . . . . . . . . . . . . . . . . . . . . . 1561.3 Las propiedades de los formularios . . . . . . . . . . . . . . . . . . . . . . 1561.4 Los métodos de los formularios . . . . . . . . . . . . . . . . . . . . . . . . . 159

Page 22: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

6Desarrolle aplicaciones Windows con Visual Studio 2015

C# 6

1.5 Los eventos de los formularios. . . . . . . . . . . . . . . . . . . . . . . . . . 160

2. Usar los controles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1612.1 Los tipos de controles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1612.2 Añadir controles a los formularios. . . . . . . . . . . . . . . . . . . . . . . 1622.3 Las propiedades de los controles . . . . . . . . . . . . . . . . . . . . . . . . 1642.4 Los menús . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1652.5 Los contenedores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1682.6 La usabilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1692.7 Añadir controles a la caja de herramientas . . . . . . . . . . . . . . . . 170

Capítulo 9

Implementación del administrador de eventos

1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173

2. La creación de controladores de eventos . . . . . . . . . . . . . . . . . . . . . . 1732.1 La mecánica de un evento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1762.2 La adición dinámica de un controlador de eventos . . . . . . . . . 1762.3 La eliminación dinámica de un controlador de eventos . . . . . . 177

3. Los controladores de eventos avanzados. . . . . . . . . . . . . . . . . . . . . . 1773.1 Un controlador para varios eventos . . . . . . . . . . . . . . . . . . . . . 1773.2 Varios controladores para un evento. . . . . . . . . . . . . . . . . . . . . 178

Capítulo 10

Validar los datos introducidos

1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

2. La validación a nivel de campos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1812.1 Las propiedades de validación . . . . . . . . . . . . . . . . . . . . . . . . . . 1812.2 Los eventos de validación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

2.2.1 KeyDown y KeyUp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1822.2.2 KeyPress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1832.2.3 Validating y Validated . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

Page 23: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

7Contenido

3. La validación a nivel de formulario . . . . . . . . . . . . . . . . . . . . . . . . . . 185

4. Los métodos de retorno al usuario. . . . . . . . . . . . . . . . . . . . . . . . . . . 1884.1 MessageBox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1884.2 ErrorProvider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190

Capítulo 11

Creación de controles de usuario

1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193

2. Los controles personalizados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194

3. La herencia de controles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

4. Los controles de usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

Capítulo 12

Creación de aplicaciones Windows 8.1

1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205

2. Principios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206

3. Las herramientas de desarrollo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207

4. El lenguaje XAML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

5. Una primera aplicación Windows WPF . . . . . . . . . . . . . . . . . . . . . . 2125.1 Bases de un proyecto WPF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2125.2 Controles y eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214

Capítulo 13

Depuración

1. Los tipos de error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2171.1 Los errores de sintaxis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2171.2 Los errores de ejecución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2181.3 Los errores de lógica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220

Page 24: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

8Desarrolle aplicaciones Windows con Visual Studio 2015

C# 6

2. El depurador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2202.1 Controlar la ejecución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2212.2 Los puntos de interrupción . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

2.2.1 Las condiciones de parada . . . . . . . . . . . . . . . . . . . . . . . . 2242.2.2 El número de llamadas . . . . . . . . . . . . . . . . . . . . . . . . . . . 2252.2.3 El filtro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2252.2.4 Las acciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

2.3 Los DataTips. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2262.4 Los PerfTips. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2282.5 Los atributos Caller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229

3. Las ventanas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2303.1 La ventana Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2313.2 La ventana Variables locales . . . . . . . . . . . . . . . . . . . . . . . . . . . 2323.3 La ventana Automático . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2323.4 La ventana Inspección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2333.5 La ventana Inmediato. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2333.6 Las otras ventanas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234

Capítulo 14

Gestión de excepciones

1. La clase Exception. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237

2. La creación de excepciones personalizadas . . . . . . . . . . . . . . . . . . . . 238

3. El desencadenamiento de excepciones . . . . . . . . . . . . . . . . . . . . . . . 239

4. La intercepción y gestión de excepciones . . . . . . . . . . . . . . . . . . . . . 242

Capítulo 15

Monitorización

1. La monitorización de la ejecución . . . . . . . . . . . . . . . . . . . . . . . . . . . 2491.1 Las clases Debug y Trace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2491.2 El listener. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252

Page 25: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

9Contenido

1.2.1 La creación de listeners. . . . . . . . . . . . . . . . . . . . . . . . . . . 2531.2.2 La copia de seguridad de las trazas . . . . . . . . . . . . . . . . . 253

1.3 Los modificadores de seguimiento. . . . . . . . . . . . . . . . . . . . . . . 2551.3.1 El funcionamiento de los modificadores

de seguimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2561.3.2 La configuración de los modificadores de seguimiento . 257

2. Los archivos de traza de eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2582.1 La interacción con los archivos de traza de eventos . . . . . . . . . 2582.2 La gestión de los archivos de traza de eventos . . . . . . . . . . . . . 2592.3 La escritura de eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260

3. Los contadores de rendimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2613.1 La creación de contadores de rendimiento . . . . . . . . . . . . . . . . 262

3.1.1 Desde Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2623.1.2 Desde el código . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264

3.2 El uso de contadores de rendimiento. . . . . . . . . . . . . . . . . . . . . 2653.3 El análisis de contadores de rendimiento . . . . . . . . . . . . . . . . . 267

Capítulo 16

Tests unitarios

1. Introducción a las pruebas unitarias . . . . . . . . . . . . . . . . . . . . . . . . . 2691.1 La creación del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2691.2 Las clases de pruebas unitarias. . . . . . . . . . . . . . . . . . . . . . . . . . 270

2. La puesta en marcha de una serie de pruebas . . . . . . . . . . . . . . . . . . 2722.1 Crear pruebas del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2722.2 Los IntelliTests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2732.3 El desarrollo de las pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274

Page 26: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

10Desarrolle aplicaciones Windows con Visual Studio 2015

C# 6

Capítulo 17

Creación del modelo de datos

1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279

2. La creación de un modelo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279

3. La creación de entidades. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281

4. La generación de la base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . 286

5. La creación de entidades a partir de código (Code First) . . . . . . . . . 292

Capítulo 18

Presentación de Entity Framework

1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297

2. El mapeo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2982.1 La capa lógica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2982.2 La capa conceptual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3002.3 La capa de mapeo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

3. Trabajar con las entidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3043.1 Las entidades. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3053.2 La clase ObjectContext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3083.3 Las relaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310

3.3.1 El concepto de tabla por tipo . . . . . . . . . . . . . . . . . . . . . . 3103.3.2 El concepto de tabla por jerarquía . . . . . . . . . . . . . . . . . . 310

Capítulo 19

Presentación de LINQ

1. Las consultas LINQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3131.1 La sintaxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3131.2 Los métodos extendidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314

Page 27: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

11Contenido

2. Los operadores de consultas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3162.1 Filtrar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316

2.1.1 Where . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3162.1.2 OfType<TResult> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3162.1.3 SelectMany . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3172.1.4 Skip y Take . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

2.2 Ordenar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3182.2.1 OrderBy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3182.2.2 ThenBy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319

2.3 Agrupar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3192.3.1 GroupBy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3192.3.2 Join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320

2.4 Agregar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3202.5 Convertir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321

3. Las consultas paralelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3213.1 Particionar una consulta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3223.2 Anular una consulta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

Capítulo 20

LINQ to Entities

1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

2. Extraer datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3262.1 La extracción simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3262.2 La extracción condicional. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327

3. Añadir, modificar y eliminar datos . . . . . . . . . . . . . . . . . . . . . . . . . . 3283.1 Añadir datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3283.2 Modificar datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3293.3 Eliminar datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3293.4 El envío de las modificaciones . . . . . . . . . . . . . . . . . . . . . . . . . . 329

Page 28: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

12Desarrolle aplicaciones Windows con Visual Studio 2015

C# 6

Capítulo 21

LINQ to SQL

1. La creación de clases LINQ to SQL . . . . . . . . . . . . . . . . . . . . . . . . . . 331

2. El objeto DataContext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3332.1 El método ExecuteQuery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3342.2 Utilizar las transacciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3352.3 Los demás miembros de DataContext . . . . . . . . . . . . . . . . . . . 335

3. Ejecutar las consultas con LINQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3363.1 Las consultas sencillas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3373.2 Las consultas filtradas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3373.3 Los joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337

4. Los procedimientos almacenados . . . . . . . . . . . . . . . . . . . . . . . . . . . 3384.1 La adición de procedimientos almacenados al modelo. . . . . . . 3384.2 La ejecución de procedimientos almacenados. . . . . . . . . . . . . . 339

Capítulo 22

LINQ to XML

1. Los objetos XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3411.1 XDocument . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3411.2 XElement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3421.3 XNamespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3431.4 XAttribute. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3441.5 XComment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344

2. Ejecutar consultas con LINQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3452.1 Las consultas sencillas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3452.2 Las consultas filtradas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3462.3 Los joins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346

Page 29: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

13Contenido

Capítulo 23

El sistema de archivos

1. Las clases de gestión del sistema de archivos . . . . . . . . . . . . . . . . . . 3471.1 DriveInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3471.2 Directory y DirectoryInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3491.3 File y FileInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3511.4 Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354

2. Trabajar con el sistema de archivos. . . . . . . . . . . . . . . . . . . . . . . . . . 3562.1 Los objetos Stream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3562.2 La clase FileStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3572.3 Leer un archivo de texto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359

2.3.1 Leer mediante la clase File . . . . . . . . . . . . . . . . . . . . . . . . 3592.3.2 Leer con la clase StreamReader . . . . . . . . . . . . . . . . . . . . 360

2.4 Escribir en un archivo de texto . . . . . . . . . . . . . . . . . . . . . . . . . 3622.4.1 Escribir mediante la clase File . . . . . . . . . . . . . . . . . . . . . 3622.4.2 Escribir con la clase StreamWriter . . . . . . . . . . . . . . . . . . 363

Capítulo 24

Serialización

1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365

2. La serialización binaria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3662.1 Conceptos básicos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3662.2 Controlar la serialización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368

2.2.1 El control por atributo . . . . . . . . . . . . . . . . . . . . . . . . . . . 3682.2.2 El control por interfaz . . . . . . . . . . . . . . . . . . . . . . . . . . . 370

3. La serialización XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3733.1 Los conceptos básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3743.2 Controlar la serialización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3773.3 La serialización XML SOAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378

Page 30: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

14Desarrolle aplicaciones Windows con Visual Studio 2015

C# 6

Capítulo 25

Expresiones regulares

1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381

2. Una primera expresión regular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382

3. Las opciones de búsqueda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383

4. Los caracteres de escape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384

5. Los conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385

6. Los grupos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386

7. Los anchors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387

8. Los cuantificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388

Capítulo 26

Multi-threading

1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389

2. La clase Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3902.1 Crear un thread. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3902.2 Suspender o anular un thread . . . . . . . . . . . . . . . . . . . . . . . . . . 3912.3 Intercambiar datos con un thread . . . . . . . . . . . . . . . . . . . . . . . 3922.4 Bloquear un thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3942.5 Prioridad de los threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395

3. Funciones asíncronas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3963.1 Task y Task<TResult>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3973.2 async y await . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399

4. El componente BackgroundWorker. . . . . . . . . . . . . . . . . . . . . . . . . . 401

Page 31: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

15Contenido

Capítulo 27

Globalización y localización

1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405

2. La cultura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405

3. La globalización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408

4. La localización. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410

Capítulo 28

Seguridad

1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413

2. Los elementos básicos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4132.1 La interfaz IPermission. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4132.2 La clase CodeAccessPermission . . . . . . . . . . . . . . . . . . . . . . . . . 4142.3 La interfaz IPrincipal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415

3. Implementación de la seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4163.1 La seguridad basada en roles . . . . . . . . . . . . . . . . . . . . . . . . . . . 416

3.1.1 Seguridad obligatoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4163.1.2 Seguridad declarativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418

3.2 La seguridad basada en permisos de acceso. . . . . . . . . . . . . . . . 4183.2.1 Seguridad obligatoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4193.2.2 Seguridad declarativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420

4. Introducción a la criptografía . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421

Capítulo 29

Para llegar más lejos

1. El diseño con GDI+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4251.1 La clase Graphics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426

1.1.1 Las coordenadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4261.1.2 Las formas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427

Page 32: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

16Desarrolle aplicaciones Windows con Visual Studio 2015

C# 6

1.2 La estructura Color y las clases Brush y Pen. . . . . . . . . . . . . . . 4291.2.1 La estructura Color. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4291.2.2 La clase Brush . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4291.2.3 La clase Pen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4301.2.4 Los argumentos de sistema . . . . . . . . . . . . . . . . . . . . . . . 431

1.3 Los ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4311.3.1 La visualización de texto . . . . . . . . . . . . . . . . . . . . . . . . . 4311.3.2 Redimensionar una imagen . . . . . . . . . . . . . . . . . . . . . . . 432

2. El remoting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4332.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4332.2 La implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434

2.2.1 La capa común . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4352.2.2 La aplicación servidor . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4362.2.3 La aplicación cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438

3. La reflexión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4413.1 La clase System.Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4413.2 Cargar un ensamblado de manera dinámica. . . . . . . . . . . . . . . 443

3.2.1 La enumeración de los tipos. . . . . . . . . . . . . . . . . . . . . . . 4443.2.2 La instanciación de objetos . . . . . . . . . . . . . . . . . . . . . . . 4453.2.3 El uso de los miembros. . . . . . . . . . . . . . . . . . . . . . . . . . . 446

Capítulo 30

Ensamblados y configuraciones

1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449

2. Los ensamblados privados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449

3. Los ensamblados compartidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452

4. Los archivos de configuración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454

Page 33: C# 6 y Visual Studio 2015 - m.ediciones-eni.com · PDF fileEdiciones ENI C# 6 y Visual Studio 2015 Los fundamentos del lenguaje Colección Recursos Informáticos Contenido

17Contenido

Capítulo 31

Despliegue

1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457

2. Los proyectos de despliegue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4582.1 XCOPY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4582.2 Proyecto CAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4592.3 Proyecto de módulo de combinación. . . . . . . . . . . . . . . . . . . . . 4602.4 Proyecto de instalación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460

3. El asistente de instalación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461

4. Configuración del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4654.1 Las propiedades del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . 4654.2 Los editores de configuración. . . . . . . . . . . . . . . . . . . . . . . . . . . 468

4.2.1 Editor del sistema de archivos . . . . . . . . . . . . . . . . . . . . . 4684.2.2 Editor del registro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4704.2.3 Editor de tipos de archivo. . . . . . . . . . . . . . . . . . . . . . . . . 4714.2.4 Editor de la interfaz de usuario . . . . . . . . . . . . . . . . . . . . 4734.2.5 Editor de acciones personalizadas . . . . . . . . . . . . . . . . . . 4754.2.6 Editor de condiciones de inicio . . . . . . . . . . . . . . . . . . . . 476

Índice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479