csharp language specification

559
Copyright Microsoft Corporation 1999-2012. Reservados todos los derechos. Envíe correcciones, comentarios y cualquier otra sugerencia a [email protected] C # Especificación del lenguaje Versión 5.0

Upload: melanie-taylor

Post on 21-Nov-2015

34 views

Category:

Documents


1 download

DESCRIPTION

CSharp, Especificación del lenguajeVersión 5.0. C# (“C sharp”) es un lenguaje de programación sencillo y moderno, orientado a objetos y con seguridad de tipos, pero también es compatible con la programación orientada a componentes.

TRANSCRIPT

  • Copyright Microsoft Corporation 1999-2012. Reservados todos los derechos. Enve correcciones, comentarios y cualquier otra sugerencia a [email protected]

    C# Especificacin del lenguaje

    Versin 5.0

  • Copyright Microsoft Corporation 1999-2012. Reservados todos los derechos.

    Aviso

    1999-2012 Microsoft Corporation. Reservados todos los derechos.

    Microsoft, Windows, Visual Basic, Visual C# y Visual C++ son marcas registradas o marcas comerciales de Microsoft

    Corporation en los EE.UU. y/o en otros pases o regiones.

    Los dems productos y nombres de compaas mencionados en esta publicacin pueden ser marcas comerciales de sus

    respectivos propietarios.

  • Tabla de contenido

    Copyright Microsoft Corporation 1999-2012. Reservados todos los derechos. iii

    Tabla de contenido

    1. Introduction ....................................................................................................................................................... 1

    1.1 Hola a todos ................................................................................................................................................... 1 1.2 Estructura del programa................................................................................................................................. 2 1.3 Tipos y variables ............................................................................................................................................ 4 1.4 Expresiones .................................................................................................................................................... 8 1.5 Instrucciones ................................................................................................................................................ 10 1.6 Clases y objetos ........................................................................................................................................... 14

    1.6.1 Miembros .............................................................................................................................................. 14 1.6.2 Accesibilidad ........................................................................................................................................ 15 1.6.3 Parmetros de tipo ................................................................................................................................ 15 1.6.4 Clases base ............................................................................................................................................ 16 1.6.5 Campos ................................................................................................................................................. 16 1.6.6 Mtodos ................................................................................................................................................ 17

    1.6.6.1 Parmetros ...................................................................................................................................... 17 1.6.6.2 Cuerpo del mtodo y variables locales ........................................................................................... 19 1.6.6.3 Mtodos estticos y de instancia .................................................................................................... 19 1.6.6.4 Mtodos virtuales, de invalidacin y abstractos ............................................................................. 20 1.6.6.5 Sobrecarga de mtodos ................................................................................................................... 22

    1.6.7 Otros miembros de funcin ................................................................................................................... 23 1.6.7.1 Constructores .................................................................................................................................. 25 1.6.7.2 Propiedades .................................................................................................................................... 26 1.6.7.3 Indizadores ..................................................................................................................................... 26 1.6.7.4 Eventos ........................................................................................................................................... 27 1.6.7.5 Operadores ..................................................................................................................................... 27 1.6.7.6 Destructores .................................................................................................................................... 28

    1.7 Structs .......................................................................................................................................................... 28 1.8 Matrices ....................................................................................................................................................... 29 1.9 Interfaces ..................................................................................................................................................... 31 1.10 Enumeraciones .......................................................................................................................................... 32 1.11 Delegados .................................................................................................................................................. 33 1.12 Atributos .................................................................................................................................................... 34

    2. Estructura lxica ............................................................................................................................................. 37

    2.1 Programas .................................................................................................................................................... 37 2.2 Gramticas ................................................................................................................................................... 37

    2.2.1 Notacin gramatical .............................................................................................................................. 37 2.2.2 Gramtica lxica ................................................................................................................................... 38 2.2.3 Gramtica sintctica .............................................................................................................................. 38

    2.3 Anlisis lxico ............................................................................................................................................. 38 2.3.1 Terminadores de lnea ........................................................................................................................... 39 2.3.2 Comentarios .......................................................................................................................................... 40 2.3.3 Espacio en blanco ................................................................................................................................. 41

    2.4 Smbolos (tokens) ........................................................................................................................................ 41 2.4.1 Secuencias de escape de caracteres Unicode ........................................................................................ 41 2.4.2 Identificadores ...................................................................................................................................... 42 2.4.3 Palabras clave ....................................................................................................................................... 44 2.4.4 Literales ................................................................................................................................................ 45

    2.4.4.1 Literales booleanos ......................................................................................................................... 45 2.4.4.2 Literales enteros ............................................................................................................................. 45

  • C# LANGUAGE SPECIFICATION

    iv Copyright Microsoft Corporation 1999-2012. Reservados todos los derechos.

    2.4.4.3 Literales reales ............................................................................................................................... 46 2.4.4.4 Literales de carcter ....................................................................................................................... 47 2.4.4.5 Literales de cadena ......................................................................................................................... 48 2.4.4.6 El literal null ................................................................................................................................... 50

    2.4.5 Operadores y signos de puntuacin ...................................................................................................... 50 2.5 Directivas de preprocesamiento ................................................................................................................... 50

    2.5.1 Smbolos de compilacin condicional .................................................................................................. 52 2.5.2 Expresiones de preprocesamiento ......................................................................................................... 52 2.5.3 Directivas de declaracin ...................................................................................................................... 53 2.5.4 Directivas de compilacin condicional ................................................................................................. 54 2.5.5 Directivas de diagnstico ...................................................................................................................... 56 2.5.6 Directivas de regin .............................................................................................................................. 57 2.5.7 Directivas de lnea ................................................................................................................................ 57 2.5.8 Directivas pragma ................................................................................................................................. 58

    2.5.8.1 Pragma warning ............................................................................................................................. 58

    3. Conceptos bsicos ............................................................................................................................................ 61

    3.1 Inicio de la aplicacin .................................................................................................................................. 61 3.2 Finalizacin de la aplicacin ....................................................................................................................... 62 3.3 Declaraciones .............................................................................................................................................. 62 3.4 Miembros ..................................................................................................................................................... 65

    3.4.1 Miembros de espacio de nombres ......................................................................................................... 65 3.4.2 Miembros de struct ............................................................................................................................... 65 3.4.3 Miembros de enumeraciones ................................................................................................................ 66 3.4.4 Miembros de clase ................................................................................................................................ 66 3.4.5 Miembros de interfaz ............................................................................................................................ 66 3.4.6 Miembros de matriz .............................................................................................................................. 66 3.4.7 Miembros de delegados ........................................................................................................................ 66

    3.5 Acceso a miembros ...................................................................................................................................... 66 3.5.1 Accesibilidad declarada ........................................................................................................................ 66 3.5.2 Dominios de accesibilidad .................................................................................................................... 67 3.5.3 Acceso protegido para miembros de instancia ...................................................................................... 70 3.5.4 Restricciones de accesibilidad .............................................................................................................. 71

    3.6 Firmas y sobrecargas ................................................................................................................................... 72 3.7 mbitos ....................................................................................................................................................... 73

    3.7.1 Ocultar nombres .................................................................................................................................... 76 3.7.1.1 Ocultar mediante anidacin ............................................................................................................ 76 3.7.1.2 Ocultar mediante herencia .............................................................................................................. 77

    3.8 Espacios de nombres y nombres de tipos .................................................................................................... 78 3.8.1 Nombres completos .............................................................................................................................. 81

    3.9 Administracin automtica de la memoria .................................................................................................. 82 3.10 Orden de ejecucin .................................................................................................................................... 84

    4. Tipos ................................................................................................................................................................. 87

    4.1 Tipos de valor .............................................................................................................................................. 87 4.1.1 Tipo System.ValueType ....................................................................................................................... 88 4.1.2 Constructores predeterminados ............................................................................................................. 88 4.1.3 Tipos struct ........................................................................................................................................... 89 4.1.4 Tipos simples ........................................................................................................................................ 89 4.1.5 Tipos enteros ......................................................................................................................................... 90 4.1.6 Tipos de punto flotante ......................................................................................................................... 92

  • Tabla de contenido

    Copyright Microsoft Corporation 1999-2012. Reservados todos los derechos. v

    4.1.7 Tipo decimal ......................................................................................................................................... 93 4.1.8 El tipo booleano .................................................................................................................................... 93 4.1.9 Tipos de enumeracin ........................................................................................................................... 94 4.1.10 Tipos que aceptan valores null ............................................................................................................ 94

    4.2 Tipos de referencia ...................................................................................................................................... 94 4.2.1 Tipos de clase ........................................................................................................................................ 95 4.2.2 Tipo object ............................................................................................................................................ 96 4.2.3 Tipo dinmico ....................................................................................................................................... 96 4.2.4 Tipo string ............................................................................................................................................. 96 4.2.5 Tipos de interfaz ................................................................................................................................... 96 4.2.6 Tipos de matriz ..................................................................................................................................... 96 4.2.7 Tipos delegados .................................................................................................................................... 96

    4.3 Conversiones boxing y unboxing ................................................................................................................ 97 4.3.1 Conversiones boxing ............................................................................................................................. 97 4.3.2 Conversiones Unboxing ........................................................................................................................ 98

    4.4 Tipos construidos ......................................................................................................................................... 99 4.4.1 Argumentos de tipo ............................................................................................................................. 100 4.4.2 Tipos cerrados y abiertos .................................................................................................................... 100 4.4.3 Tipos enlazados y sin enlazar ............................................................................................................. 101 4.4.4 Cumplimiento de las restricciones ...................................................................................................... 101

    4.5 Parmetros de tipo ..................................................................................................................................... 102 4.6 Tipos de rbol de expresiones ................................................................................................................... 103 4.7 Tipo dinmico ............................................................................................................................................ 104

    5. Variables ........................................................................................................................................................ 105

    5.1 Categoras de variables .............................................................................................................................. 105 5.1.1 Variables estticas ............................................................................................................................... 105 5.1.2 Variables de instancia ......................................................................................................................... 105

    5.1.2.1 Variables de instancia en clases ................................................................................................... 105 5.1.2.2 Variables de instancia en structs .................................................................................................. 106

    5.1.3 Elementos matriciales ......................................................................................................................... 106 5.1.4 Parmetros de valor............................................................................................................................. 106 5.1.5 Parmetros de referencia ..................................................................................................................... 106 5.1.6 Parmetros de salida ........................................................................................................................... 107 5.1.7 Variables locales ................................................................................................................................. 107

    5.2 Valores predeterminados ........................................................................................................................... 108 5.3 Estado de asignacin definitiva ................................................................................................................. 108

    5.3.1 Variables asignadas inicialmente ........................................................................................................ 109 5.3.2 Variables no asignadas inicialmente ................................................................................................... 109 5.3.3 Reglas precisas para determinar asignaciones definitivas .................................................................. 110

    5.3.3.1 Reglas generales para instrucciones ............................................................................................. 110 5.3.3.2 Instrucciones de bloques e instrucciones checked y unchecked .................................................. 111 5.3.3.3 Instrucciones de expresiones ........................................................................................................ 111 5.3.3.4 Instrucciones de declaracin ........................................................................................................ 111 5.3.3.5 Instrucciones If ............................................................................................................................. 111 5.3.3.6 Instrucciones Switch .................................................................................................................... 111 5.3.3.7 Instrucciones While ...................................................................................................................... 111 5.3.3.8 Instrucciones Do ........................................................................................................................... 112 5.3.3.9 Instrucciones For .......................................................................................................................... 112 5.3.3.10 Instrucciones Break, Continue y Goto ....................................................................................... 112 5.3.3.11 Instrucciones Throw ................................................................................................................... 112

  • C# LANGUAGE SPECIFICATION

    vi Copyright Microsoft Corporation 1999-2012. Reservados todos los derechos.

    5.3.3.12 Instrucciones Return ................................................................................................................... 113 5.3.3.13 Instrucciones Try-catch .............................................................................................................. 113 5.3.3.14 Instrucciones try-finally ............................................................................................................. 113 5.3.3.15 Instrucciones Try-finally-catch .................................................................................................. 114 5.3.3.16 Instrucciones Foreach ................................................................................................................. 114 5.3.3.17 Instrucciones Using .................................................................................................................... 115 5.3.3.18 Instrucciones Lock ..................................................................................................................... 115 5.3.3.19 Instrucciones yield...................................................................................................................... 115 5.3.3.20 Reglas generales para expresiones simples ................................................................................ 115 5.3.3.21 Reglas generales para expresiones con expresiones incrustadas ................................................ 115 5.3.3.22 Expresiones de invocacin y expresiones de creacin de objetos .............................................. 116 5.3.3.23 Expresiones de asignacin simples ............................................................................................ 116 5.3.3.24 Expresiones && ......................................................................................................................... 116 5.3.3.25 Expresiones || .............................................................................................................................. 117 5.3.3.26 ! expresiones ............................................................................................................................... 118 5.3.3.27 Expresiones ?? ............................................................................................................................ 119 5.3.3.28 Expresiones ?: ............................................................................................................................ 119 5.3.3.29 Funciones annimas ................................................................................................................... 120

    5.4 Referencias de variables ............................................................................................................................ 120 5.5 Atomicidad de las referencias de variable ................................................................................................. 120

    6. Conversiones .................................................................................................................................................. 121

    6.1 Conversiones implcitas ............................................................................................................................. 121 6.1.1 Conversiones de identidad .................................................................................................................. 122 6.1.2 Conversiones numricas implcitas ..................................................................................................... 122 6.1.3 Conversiones de enumeracin implcitas ............................................................................................ 122 6.1.4 Conversiones implcitas que aceptan valores NULL .......................................................................... 122 6.1.5 Conversiones del literal NULL ........................................................................................................... 123 6.1.6 Conversiones de referencia implcitas ................................................................................................ 123 6.1.7 Conversiones boxing ........................................................................................................................... 124 6.1.8 Conversiones dinmicas implcitas ..................................................................................................... 124 6.1.9 Conversiones implcitas de expresin constante ................................................................................. 125 6.1.10 Conversiones implcitas con parmetros de tipo ............................................................................... 125 6.1.11 Conversiones definidas por el usuario implcitas ............................................................................. 125 6.1.12 Conversiones de funcin annima y conversiones de grupo de mtodos ......................................... 126

    6.2 Conversiones explcitas ............................................................................................................................. 126 6.2.1 Conversiones explcitas numricas ..................................................................................................... 126 6.2.2 Conversiones de enumeracin explcitas ............................................................................................ 128 6.2.3 Conversiones explcitas que aceptan valores NULL .......................................................................... 128 6.2.4 Conversiones explcitas de referencia ................................................................................................. 129 6.2.5 Conversiones Unboxing ...................................................................................................................... 130 6.2.6 Conversiones dinmicas explcitas ..................................................................................................... 130 6.2.7 Conversiones explcitas con parmetros de tipo ................................................................................. 131 6.2.8 Conversiones explcitas definidas por el usuario ................................................................................ 132

    6.3 Conversiones estndar ............................................................................................................................... 132 6.3.1 Conversiones implcitas estndar ........................................................................................................ 132 6.3.2 Conversiones explcitas estndar ........................................................................................................ 132

    6.4 Conversiones definidas por el usuario ....................................................................................................... 132 6.4.1 Conversiones permitidas definidas por el usuario .............................................................................. 132 6.4.2 Operadores de conversin de elevacin .............................................................................................. 133 6.4.3 Evaluacin de conversiones definidas por el usuario ......................................................................... 133

  • Tabla de contenido

    Copyright Microsoft Corporation 1999-2012. Reservados todos los derechos. vii

    6.4.4 Conversiones explcitas definidas por el usuario ................................................................................ 134 6.4.5 Conversiones explcitas definidas por el usuario ................................................................................ 135

    6.5 Conversiones de funcin annima ............................................................................................................. 136 6.5.1 Evaluacin de conversiones de funcin annima a tipos delegados ................................................... 137 6.5.2 Evaluacin de conversiones de funcin annima a tipos delegados de rbol de expresiones ............ 138 6.5.3 Ejemplo de implementacin ............................................................................................................... 138

    6.6 Conversiones de grupo de mtodos ........................................................................................................... 141

    7. Expresiones .................................................................................................................................................... 143

    7.1 Clasificaciones de expresin ..................................................................................................................... 143 7.1.1 Valores de expresiones ....................................................................................................................... 144

    7.2 Enlace esttico y dinmico ........................................................................................................................ 144 7.2.1 Tiempo de enlace ................................................................................................................................ 145 7.2.2 Enlace dinmico .................................................................................................................................. 145 7.2.3 Tipos de datos de expresiones constitutivas ....................................................................................... 146

    7.3 Operadores ................................................................................................................................................. 146 7.3.1 Prioridad y asociatividad de los operadores ........................................................................................ 147 7.3.2 Sobrecarga de operadores ................................................................................................................... 148 7.3.3 Resolucin de sobrecarga de operador unario .................................................................................... 149 7.3.4 Resolucin de sobrecarga de operador binario ................................................................................... 149 7.3.5 Operadores candidatos definidos por el usuario ................................................................................. 150 7.3.6 Promociones numricas ...................................................................................................................... 150

    7.3.6.1 Promociones numricas unarias ................................................................................................... 151 7.3.6.2 Promociones numricas binarias .................................................................................................. 151

    7.3.7 Operadores de elevacin ..................................................................................................................... 152 7.4 Bsqueda de miembros .............................................................................................................................. 152

    7.4.1 Tipos base ........................................................................................................................................... 154 7.5 Miembros de funcin ................................................................................................................................. 154

    7.5.1 Listas de argumentos .......................................................................................................................... 157 7.5.1.1 Parmetros correspondientes ........................................................................................................ 158 7.5.1.2 Evaluacin en tiempo de ejecucin de listas de argumentos ........................................................ 159

    7.5.2 Inferencia de tipos ............................................................................................................................... 161 7.5.2.1 La primera fase ............................................................................................................................. 162 7.5.2.2 La segunda fase ............................................................................................................................ 162 7.5.2.3 Tipos de entrada ........................................................................................................................... 162 7.5.2.4 Tipos de resultado ........................................................................................................................ 162 7.5.2.5 Dependencia ................................................................................................................................. 162 7.5.2.6 Inferencias de tipo de resultado .................................................................................................... 162 7.5.2.7 Inferencias explcitas de tipo de parmetro .................................................................................. 163 7.5.2.8 Inferencias exactas ....................................................................................................................... 163 7.5.2.9 Inferencias de lmite inferior ........................................................................................................ 163 7.5.2.10 Inferencias de lmite superior ..................................................................................................... 164 7.5.2.11 Fijar tipos ................................................................................................................................... 164 7.5.2.12 Tipo de resultado inferido .......................................................................................................... 165 7.5.2.13 Inferencia de tipos para la conversin de grupos de mtodos .................................................... 166 7.5.2.14 Buscar el mejor tipo comn de un conjunto de expresiones ...................................................... 167

    7.5.3 Resolucin de sobrecargas .................................................................................................................. 167 7.5.3.1 Miembro de funcin aplicable ...................................................................................................... 167 7.5.3.2 Mejor miembro de funcin ........................................................................................................... 168 7.5.3.3 Mejor conversin de expresiones ................................................................................................. 169 7.5.3.4 Mejor conversin de tipos ............................................................................................................ 170

  • C# LANGUAGE SPECIFICATION

    viii Copyright Microsoft Corporation 1999-2012. Reservados todos los derechos.

    7.5.3.5 Mejor destino de conversin ........................................................................................................ 170 7.5.3.6 Sobrecargas en clases genricas ................................................................................................... 170

    7.5.4 Comprobacin en tiempo de compilacin de resolucin de sobrecarga dinmica ............................. 170 7.5.5 Invocacin de miembros de funcin ................................................................................................... 171

    7.5.5.1 Invocaciones en instancias de conversin boxing ........................................................................ 172 7.6 Expresiones primarias ............................................................................................................................... 172

    7.6.1 Literales .............................................................................................................................................. 173 7.6.2 Nombres sencillos ............................................................................................................................... 173

    7.6.2.1 Significado invariable en bloques ................................................................................................ 175 7.6.3 Expresiones entre parntesis ............................................................................................................... 176 7.6.4 Acceso a miembros ............................................................................................................................. 176

    7.6.4.1 Nombres simples y nombres de tipos idnticos ........................................................................... 178 7.6.4.2 Ambigedades gramaticales ......................................................................................................... 179

    7.6.5 Expresiones de invocacin .................................................................................................................. 179 7.6.5.1 Invocaciones de mtodo ............................................................................................................... 180 7.6.5.2 Invocaciones del mtodo de extensin ......................................................................................... 181 7.6.5.3 Invocaciones de delegados ........................................................................................................... 184

    7.6.6 Acceso a elementos ............................................................................................................................. 184 7.6.6.1 Acceso a matrices ......................................................................................................................... 185 7.6.6.2 Acceso al indizador ...................................................................................................................... 185

    7.6.7 Acceso a this ....................................................................................................................................... 186 7.6.8 Acceso a bases .................................................................................................................................... 187 7.6.9 Operadores postfijos de incremento y decremento ............................................................................. 187 7.6.10 El operador new ................................................................................................................................ 188

    7.6.10.1 Expresiones de creacin de objetos ............................................................................................ 189 7.6.10.2 Inicializadores de objeto ............................................................................................................. 190 7.6.10.3 Inicializadores de coleccin ....................................................................................................... 192 7.6.10.4 Expresiones de creacin de matrices .......................................................................................... 194 7.6.10.5 Expresiones de creacin de delegados ....................................................................................... 196 7.6.10.6 Expresiones de creacin de objetos annimos ........................................................................... 197

    7.6.11 Operador typeof ................................................................................................................................ 199 7.6.12 Los operadores checked y unchecked ............................................................................................... 201 7.6.13 Expresiones de valor predeterminadas .............................................................................................. 203 7.6.14 Expresiones de mtodos annimos ................................................................................................... 203

    7.7 Operadores unarios .................................................................................................................................... 204 7.7.1 Operador unario de signo ms ............................................................................................................ 204 7.7.2 Operador unario de signo menos ........................................................................................................ 204 7.7.3 Operador de negacin lgica .............................................................................................................. 205 7.7.4 Operador de complemento de bit a bit ................................................................................................ 205 7.7.5 Operadores prefijos de incremento y decremento ............................................................................... 205 7.7.6 Expresiones de conversin .................................................................................................................. 206 7.7.7 Expresiones await ............................................................................................................................... 207

    7.7.7.1 Expresiones que admiten await .................................................................................................... 208 7.7.7.2 Clasificaciones de las expresiones await ...................................................................................... 208 7.7.7.3 Evaluacin de expresiones await en tiempo de ejecucin ............................................................ 208

    7.8 Operadores aritmticos .............................................................................................................................. 209 7.8.1 Operador de multiplicacin ................................................................................................................. 209 7.8.2 Operador de divisin ........................................................................................................................... 210 7.8.3 Operador de resto ................................................................................................................................ 211 7.8.4 Operador de suma ............................................................................................................................... 212 7.8.5 Operador de resta ................................................................................................................................ 214

  • Tabla de contenido

    Copyright Microsoft Corporation 1999-2012. Reservados todos los derechos. ix

    7.9 Operadores de desplazamiento .................................................................................................................. 216 7.10 Operadores de comprobacin de tipos y relacionales .............................................................................. 217

    7.10.1 Operadores de comparacin de enteros ............................................................................................ 218 7.10.2 Operadores de comparacin de punto flotante .................................................................................. 218 7.10.3 Operadores de comparacin decimales ............................................................................................. 219 7.10.4 Operadores de igualdad booleanos ................................................................................................... 219 7.10.5 Operadores de comparacin de tipo de enumeracin ....................................................................... 219 7.10.6 Operadores de igualdad de tipos de referencia ................................................................................. 220 7.10.7 Operadores de igualdad de cadenas .................................................................................................. 221 7.10.8 Operadores de igualdad de delegados ............................................................................................... 222 7.10.9 Operadores de igualdad y NULL ...................................................................................................... 222 7.10.10 Operador Is ..................................................................................................................................... 223 7.10.11 Operador As .................................................................................................................................... 223

    7.11 Operadores lgicos .................................................................................................................................. 224 7.11.1 Operadores lgicos enteros ............................................................................................................... 225 7.11.2 Operadores lgicos de enumeracin ................................................................................................. 225 7.11.3 Operadores lgicos booleanos .......................................................................................................... 225 7.11.4 Operadores lgicos booleanos que aceptan valores NULL .............................................................. 225

    7.12 Operadores lgicos condicionales ........................................................................................................... 226 7.12.1 Operadores lgicos condicionales booleanos ................................................................................... 227 7.12.2 Operadores lgicos condicionales definidos por el usuario .............................................................. 227

    7.13 El operador de incorporacin de NULL .................................................................................................. 227 7.14 Operador condicional .............................................................................................................................. 228 7.15 Expresiones de funciones annimas ........................................................................................................ 229

    7.15.1 Signaturas de funcin annima ......................................................................................................... 231 7.15.2 Cuerpos de funcin annima ............................................................................................................ 231 7.15.3 Resolucin de sobrecargas ................................................................................................................ 232 7.15.4 Funciones annimas y enlace dinmico ............................................................................................ 233 7.15.5 Variables externas ............................................................................................................................. 233

    7.15.5.1 Variables externas capturadas .................................................................................................... 233 7.15.5.2 Creacin de instancias de variables locales ................................................................................ 234

    7.15.6 Expresiones de evaluacin de funciones annimas .......................................................................... 236 7.16 Expresiones de consulta........................................................................................................................... 236

    7.16.1 Ambigedad en expresiones de consulta .......................................................................................... 237 7.16.2 Traduccin de expresiones de consulta ............................................................................................. 238

    7.16.2.1 Clusulas Select y Groupby con continuaciones ........................................................................ 238 7.16.2.2 Tipos de variable de intervalo explcitos .................................................................................... 239 7.16.2.3 Expresiones de consulta degeneradas ......................................................................................... 239 7.16.2.4 Clusulas from, let, where, join y orderby ................................................................................. 240 7.16.2.5 Clusulas Select.......................................................................................................................... 243 7.16.2.6 Clusulas Groupby ..................................................................................................................... 243 7.16.2.7 Identificadores transparentes ...................................................................................................... 244

    7.16.3 El patrn de expresiones de consulta ................................................................................................ 245 7.17 Operadores de asignacin ........................................................................................................................ 246

    7.17.1 Asignacin simple ............................................................................................................................. 247 7.17.2 Asignacin compuesta ...................................................................................................................... 249 7.17.3 Asignacin de eventos ...................................................................................................................... 250

    7.18 Expresin ................................................................................................................................................. 250 7.19 Expresiones constantes ............................................................................................................................ 250 7.20 Expresiones booleanas ............................................................................................................................. 252

  • C# LANGUAGE SPECIFICATION

    x Copyright Microsoft Corporation 1999-2012. Reservados todos los derechos.

    8. Instrucciones .................................................................................................................................................. 253

    8.1 Puntos finales y alcance ............................................................................................................................. 253 8.2 Bloques ...................................................................................................................................................... 255

    8.2.1 Listas de instrucciones ........................................................................................................................ 255 8.3 Instruccin vaca ........................................................................................................................................ 256 8.4 Instrucciones con etiqueta ......................................................................................................................... 256 8.5 Instrucciones de declaracin ...................................................................................................................... 257

    8.5.1 Declaraciones de variables locales ...................................................................................................... 257 8.5.2 Declaraciones de constantes locales ................................................................................................... 259

    8.6 Instrucciones de expresiones ..................................................................................................................... 259 8.7 Instrucciones de seleccin ......................................................................................................................... 260

    8.7.1 Instruccin If ....................................................................................................................................... 260 8.7.2 Instruccin Switch .............................................................................................................................. 261

    8.8 Instrucciones de iteracin .......................................................................................................................... 264 8.8.1 Instruccin While ................................................................................................................................ 265 8.8.2 Instruccin Do ..................................................................................................................................... 265 8.8.3 Instruccin For .................................................................................................................................... 266 8.8.4 Instruccin Foreach ............................................................................................................................. 267

    8.9 Instrucciones Jump .................................................................................................................................... 270 8.9.1 Instruccin Break ................................................................................................................................ 271 8.9.2 Instruccin continue ............................................................................................................................ 272 8.9.3 Instruccin Goto ................................................................................................................................. 272 8.9.4 Instruccin Return ............................................................................................................................... 273 8.9.5 Instruccin throw ................................................................................................................................ 274

    8.10 Instruccin try .......................................................................................................................................... 275 8.11 Instrucciones checked y unchecked ......................................................................................................... 278 8.12 Instruccin lock ....................................................................................................................................... 279 8.13 Instruccin using ..................................................................................................................................... 279 8.14 La instruccin yield ................................................................................................................................. 282

    9. Espacios de nombres ..................................................................................................................................... 284

    9.1 Unidades de compilacin........................................................................................................................... 284 9.2 Declaraciones de espacio de nombres ....................................................................................................... 284 9.3 Alias extern ................................................................................................................................................ 286 9.4 Directivas Using ........................................................................................................................................ 286

    9.4.1 Directivas de alias using ..................................................................................................................... 287 9.4.2 Directivas Using de espacio de nombres ............................................................................................ 290

    9.5 Miembros de espacio de nombres ............................................................................................................. 292 9.6 Declaraciones de tipo ................................................................................................................................ 292 9.7 Calificadores de alias de espacios de nombres .......................................................................................... 293

    9.7.1 Unicidad de los alias ........................................................................................................................... 294

    10. Clases ............................................................................................................................................................ 295

    10.1 Declaraciones de clases ........................................................................................................................... 295 10.1.1 Modificadores de clase ..................................................................................................................... 295

    10.1.1.1 Clases abstractas ......................................................................................................................... 296 10.1.1.2 Clases sealed .............................................................................................................................. 296 10.1.1.3 Clases estticas ........................................................................................................................... 297

    10.1.2 Modificador parcial ........................................................................................................................... 298 10.1.3 Parmetros de tipo............................................................................................................................. 298 10.1.4 Especificacin de clase base ............................................................................................................. 298

  • Tabla de contenido

    Copyright Microsoft Corporation 1999-2012. Reservados todos los derechos. xi

    10.1.4.1 Clases base ................................................................................................................................. 298 10.1.4.2 Implementaciones de interfaces ................................................................................................. 300

    10.1.5 Restricciones de parmetros de tipo.................................................................................................. 300 10.1.6 Cuerpo de clase ................................................................................................................................. 305

    10.2 Tipos parciales ......................................................................................................................................... 305 10.2.1 Atributos ........................................................................................................................................... 305 10.2.2 Modificadores ................................................................................................................................... 306 10.2.3 Parmetros de tipo y restricciones .................................................................................................... 306 10.2.4 Clase base ......................................................................................................................................... 307 10.2.5 Interfaces base ................................................................................................................................... 307 10.2.6 Miembros .......................................................................................................................................... 307 10.2.7 Mtodos parciales ............................................................................................................................. 308 10.2.8 Enlace de nombres ............................................................................................................................ 310

    10.3 Miembros de clase ................................................................................................................................... 311 10.3.1 El tipo de instancia ............................................................................................................................ 312 10.3.2 Miembros de tipos construidos ......................................................................................................... 312 10.3.3 Herencia ............................................................................................................................................ 313 10.3.4 Modificador New .............................................................................................................................. 314 10.3.5 Modificadores de acceso ................................................................................................................... 315 10.3.6 Tipos constituyentes ......................................................................................................................... 315 10.3.7 Miembros estticos y de instancia .................................................................................................... 315 10.3.8 Tipos anidados .................................................................................................................................. 316

    10.3.8.1 Nombre completo ....................................................................................................................... 316 10.3.8.2 Accesibilidad declarada .............................................................................................................. 316 10.3.8.3 Ocultar ........................................................................................................................................ 317 10.3.8.4 Acceso this ................................................................................................................................. 318 10.3.8.5 Acceso a miembros privados y protegidos del tipo contenedor ................................................. 318 10.3.8.6 Tipos anidados en clases genricas ............................................................................................ 319

    10.3.9 Nombres de miembro reservados ...................................................................................................... 320 10.3.9.1 Nombres de miembros reservados para propiedades ................................................................. 320 10.3.9.2 Nombres de miembros reservados para eventos ........................................................................ 321 10.3.9.3 Nombres de miembros reservados para indizadores .................................................................. 321 10.3.9.4 Nombres de miembros reservados para destructores ................................................................. 321

    10.4 Constantes ................................................................................................................................................ 321 10.5 Campos .................................................................................................................................................... 323

    10.5.1 Campos estticos y de instancia ........................................................................................................ 324 10.5.2 Campos de solo lectura ..................................................................................................................... 325

    10.5.2.1 Utilizar campos de slo lectura estticos para constantes .......................................................... 326 10.5.2.2 Versiones de constantes y campos de slo lectura estticos ...................................................... 326

    10.5.3 Campos volatile ................................................................................................................................ 327 10.5.4 Inicializacin de campos ................................................................................................................... 328 10.5.5 Inicializadores de variables ............................................................................................................... 328

    10.5.5.1 Inicializacin de campos estticos ............................................................................................. 329 10.5.5.2 Inicializacin de campos de instancia ........................................................................................ 330

    10.6 Mtodos ................................................................................................................................................... 331 10.6.1 Parmetros de mtodos ..................................................................................................................... 333

    10.6.1.1 Parmetros de valor .................................................................................................................... 335 10.6.1.2 Parmetros de referencia ............................................................................................................ 335 10.6.1.3 Parmetros de salida ................................................................................................................... 336 10.6.1.4 Matrices de parmetros .............................................................................................................. 337

    10.6.2 Mtodos estticos y de instancia ....................................................................................................... 339

  • C# LANGUAGE SPECIFICATION

    xii Copyright Microsoft Corporation 1999-2012. Reservados todos los derechos.

    10.6.3 Mtodos virtuales .............................................................................................................................. 339 10.6.4 Mtodos de reemplazo ...................................................................................................................... 341 10.6.5 Mtodos sellados ............................................................................................................................... 344 10.6.6 Mtodos abstractos ........................................................................................................................... 344 10.6.7 Mtodos externos .............................................................................................................................. 346 10.6.8 Mtodos parciales ............................................................................................................................. 346 10.6.9 Mtodos de extensin ....................................................................................................................... 346 10.6.10 Cuerpo del mtodo .......................................................................................................................... 347 10.6.11 Sobrecarga de mtodos ................................................................................................................... 348

    10.7 Propiedades .............................................................................................................................................. 348 10.7.1 Propiedades estticas y de instancia ................................................................................................. 349 10.7.2 Descriptores de acceso ...................................................................................................................... 349 10.7.3 Propiedades automticamente implementadas .................................................................................. 355 10.7.4 Accesibilidad .................................................................................................................................... 355 10.7.5 Descriptores de acceso virtual, sellado, de invalidacin y abstracto ................................................ 357

    10.8 Eventos .................................................................................................................................................... 358 10.8.1 Eventos como campos ....................................................................................................................... 360 10.8.2 Descriptores de acceso de evento ..................................................................................................... 362 10.8.3 Eventos estticos y de instancia ........................................................................................................ 363 10.8.4 Descriptores de acceso virtual, sellado, de invalidacin y abstracto ................................................ 363

    10.9 Indizadores .............................................................................................................................................. 364 10.9.1 Sobrecarga de indizadores ................................................................................................................ 367

    10.10 Operadores ............................................................................................................................................. 367 10.10.1 Operadores unarios ......................................................................................................................... 369 10.10.2 Operadores binarios ........................................................................................................................ 370 10.10.3 Operadores de conversin ............................................................................................................... 370

    10.11 Constructores de instancia ..................................................................................................................... 373 10.11.1 Inicializadores de constructor ......................................................................................................... 374 10.11.2 Inicializadores de variables de instancia ......................................................................................... 375 10.11.3 Ejecucin de constructores ............................................................................................................. 375 10.11.4 Constructores predeterminados ....................................................................................................... 377 10.11.5 Constructores Private ...................................................................................................................... 377 10.11.6 Parmetros de constructor de instancia opcionales ......................................................................... 378

    10.12 Constructores static ............................................................................................................................... 378 10.13 Destructores ........................................................................................................................................... 380 10.14 Iteradores ............................................................................................................................................... 382

    10.14.1 Interfaces de enumerador ................................................................................................................ 382 10.14.2 Interfaces enumerables .................................................................................................................... 382 10.14.3 Tipo Yield ....................................................................................................................................... 382 10.14.4 Objetos del enumerador .................................................................................................................. 382

    10.14.4.1 El mtodo MoveNext ............................................................................................................... 383 10.14.4.2 La propiedad Current ............................................................................................................... 384 10.14.4.3 El mtodo Dispose ................................................................................................................... 384

    10.14.5 Objetos enumerables ....................................................................................................................... 385 10.14.5.1 El mtodo GetEnumerator ........................................................................................................ 385

    10.14.6 Ejemplo de implementacin ........................................................................................................... 385 10.15 Funciones asincrnicas .......................................................................................................................... 391

    10.15.1 Evaluacin de una funcin asincrnica que devuelve tareas .......................................................... 392 10.15.2 Evaluacin de una funcin asincrnica que devuelve void ............................................................ 392

    11. Structs .......................................................................................................................................................... 393

  • Tabla de contenido

    Copyright Microsoft Corporation 1999-2012. Reservados todos los derechos. xiii

    11.1 Declaraciones de struct ............................................................................................................................ 393 11.1.1 Modificadores de struct ..................................................................................................................... 393 11.1.2 Modificador parcial ........................................................................................................................... 394 11.1.3 Interfaces struct ................................................................................................................................. 394 11.1.4 Cuerpo de struct ................................................................................................................................ 394

    11.2 Miembros de struct .................................................................................................................................. 394 11.3 Diferencias entre clase y struct ................................................................................................................ 394

    11.3.1 Semnticas de valor .......................................................................................................................... 395 11.3.2 Herencia ............................................................................................................................................ 396 11.3.3 Asignacin ........................................................................................................................................ 396 11.3.4 Valores predeterminados .................................................................................................................. 396 11.3.5 Conversiones boxing y unboxing ...................................................................................................... 397 11.3.6 Significado de this ............................................................................................................................ 399 11.3.7 Inicializadores de campo ................................................................................................................... 399 11.3.8 Constructores .................................................................................................................................... 399 11.3.9 Destructores ...................................................................................................................................... 400 11.3.10 Constructores static ......................................................................................................................... 400

    11.4 Ejemplos de struct ................................................................................................................................... 400 11.4.1 Tipo entero de base de datos ............................................................................................................. 400 11.4.2 Tipo booleano de base de datos ........................................................................................................ 402

    12. Matrices ........................................................................................................................................................ 405

    12.1 Tipos de matriz ........................................................................................................................................ 405 12.1.1 Tipo System.Array ............................................................................................................................ 406 12.1.2 Matrices y la interfaz IList genrica ................................................................................................. 406

    12.2 Creacin de matrices ............................................................................................................................... 407 12.3 Acceso a los elementos de matriz ............................................................................................................ 407 12.4 Miembros de matriz ................................................................................................................................. 407 12.5 Covarianza de matrices ............................................................................................................................ 407 12.6 Inicializadores de matrices ...................................................................................................................... 408

    13. Interfaces ...................................................................................................................................................... 411

    13.1 Declaraciones de interfaz......................................................................................................................... 411 13.1.1 Modificadores de interfaz ................................................................................................................. 411 13.1.2 Modificador parcial ........................................................................................................................... 412 13.1.3 Listas de parmetros de tipo variante ................................................................................................ 412

    13.1.3.1 Seguridad de la varianza ............................................................................................................ 412 13.1.3.2 Conversin de varianza .............................................................................................................. 413

    13.1.4 Interfaces base ................................................................................................................................... 413 13.1.5 Cuerpo de interfaz ............................................................................................................................. 414

    13.2 Miembros de interfaz ............................................................................................................................... 414 13.2.1 Mtodos de interfaz........................................................................................................................... 415 13.2.2 Propiedades de interfaz ..................................................................................................................... 416 13.2.3 Eventos de interfaz ............................................................................................................................ 416 13.2.4 Indizadores de interfaz ...................................................................................................................... 416 13.2.5 Acceso a miembros de interfaz ......................................................................................................... 417

    13.3 Nombres completos de miembros de interfaz ......................................................................................... 419 13.4 Implementaciones de interfaces ............................................................................................................... 419

    13.4.1 Implementaciones de miembro de interfaz explcitas ....................................................................... 420 13.4.2 Exclusividad de interfaces implementadas ....................................................................................... 422 13.4.3 Implementacin de mtodos genricos ............................................................................................. 423

  • C# LANGUAGE SPECIFICATION

    xiv Copyright Microsoft Corporation 1999-2012. Reservados todos los derechos.

    13.4.4 Asignacin de interfaces ................................................................................................................... 424 13.4.5 Herencia de implementacin de interfaces ....................................................................................... 427 13.4.6 Reimplementacin de interfaces ....................................................................................................... 428 13.4.7 Interfaces y clases abstractas ............................................................................................................ 429

    14. Enumeraciones ............................................................................................................................................ 431

    14.1 Declaraciones de enumeracin ................................................................................................................ 431 14.2 Modificadores de enumeracin ............................................................................................................... 431 14.3 Miembros de enumeracin ...................................................................................................................... 432 14.4 Tipo System.Enum .................................................................................................................................. 434 14.5 Valores y operaciones de enumeracin ................................................................................................... 434

    15. Delegados ..................................................................................................................................................... 435

    15.1 Declaraciones de delegados ..................................................................................................................... 435 15.2 Compatibilidad de delegados ................................................................................................................... 437 15.3 Creacin de instancias de delegados ....................................................................................................... 438 15.4 Invocacin de delegados .......................................................................................................................... 438

    16. Excepciones .................................................................................................................................................. 441

    16.1 Causas de excepciones ............................................................................................................................ 441 16.2 Clase System.Exception .......................................................................................................................... 441 16.3 Cmo controlar excepciones ................................................................................................................... 441 16.4 Clases de excepcin comunes .................................................................................................................. 442

    17. Atributos ...................................................................................................................................................... 445

    17.1 Clases de atributos ................................................................................................................................... 445 17.1.1 Uso de los atributos ........................................................................................................................... 445 17.1.2 Parmetros posicionales y con nombre ............................................................................................. 446 17.1.3 Tipos de parmetros de atributos ...................................................................................................... 447

    17.2 Especificacin de atributos ...................................................................................................................... 447 17.3 Instancias de atributo ............................................................................................................................... 453

    17.3.1 Compilacin de un atributo ........................................................................