KINGSLEY-HUGHES, ADRIAN / KINGSLEY-HUGHES, KATHIE
Introducción
¿Cómo es de diferente este libro?
¿Para quién es este libro?
¿Cómo está estructurado este libro?
¿Cómo abordar los capítulos?
Algunos consejos...
Convenciones
1. ¿Qué es C#?
El nombre
Visión de conjunto
Historia
C# y CLR
Componentes en .NET
Estándares
Otras implementaciones
Código C# de ejemplo
Las ventajas de aprender C#
Resumen
2. Empezar a trabajar con C#
Aprender C# es más barato de lo que pensaba
El extremo barato del espectro
El editor de texto
La plataforma Microsoft .NET Framework
Cómo utilizar herramientas gratuitas C#
Escribir código
Una utilidad barata que hace la vida más sencilla
Editores de texto y herramientas C# alternativos
Herramientas de negocio: Visual Studio y Visual C#
Resumen
3. Visión de conjunto de C#
C#
Fundamentos básicos de C#
Examinar el código fuente C#
Tipos
Tipos valor
Tipos referencia
Tipos predefinidos
Sobrecarga
Conversiones
Tipos tabla
Variables y parámetros
Expresiones
Sentencias
Clases
Constantes
Campos
Métodos
Propiedades
Eventos
Operadores
Indexadores
Constructores de instancia
Finalizadores
Constructores estáticos
Herencia
Clases estáticas
Estructuras
Interfaces
Delegados
Enum
Genéricos
Iteradores
Tipos anulables
Resumen
4. Estructura del lenguaje C#
Programas C#
Gramáticas
Ambigüedades de gramática
Análisis léxico
Terminadores de línea
Comentarios
Espacio en blanco
Tokens
Operadores y signos de puntuación
Directivas de preprocesamiento
Resumen
5. Conceptos C#
Inicio de una aplicación
Finalización de una aplicación
Declaraciones C#
Miembros
Miembros de un espacio de nombres
Miembros de un estructura
Miembros de una enumeración
Miembros de una clase
Miembros de una interfaz
Miembros de una tabla
Miembros de un delegado
Acceso a miembros
Accesibilidad declarada
Firmas
Firmas de índices
Firmas de constructor de instancia
Firmas de método
Firmas de operador
Firmas y sobrecarga
Sobrecarga de indexadores
Sobrecarga de constructores de instancias
Sobrecarga de métodos
Sobrecarga de operadores
Ámbitos
Espacio de nombres y nombres de tipos
Administración de memoria en C#
Resumen
6. Tipos
Tres tipos de tipos
Diferencia entre tipos de valor y referencia
Parámetros ref y out
El sistema de tipos de C#
Tipos de valor
System.ValueType
Constructores predeterminados
Tipos estructura
Tipos simples
Tipos integrales
Utilizar tipos
Tipos de punto flotante
Tipos decimales
Tipo bool
Tipos de enumeración
Tipos de referencia
Tipos de clase
Tipo object
Tipo string
Tipos de tabla
Tipos de delegado
El tipo null
Boxing y unboxing
Boxing
Unboxing
Tipos anulables
Miembros
Interfaces implementadas
Resumen
7. Variables
¿Qué son variables?
No todas las variables se crean igual
Categorías de variables
Variables estáticas
Elementos de tabla
Variables de instancia
Utilizar variables de instancia en clases
Utilizar variables de instancia en estructuras
Parámetros de valores
Parámetros de referencia
Parámetros de salida
Variables locales
Valores predeterminados
Asignación definitiva
Variables asignadas inicialmente
Variables no asignadas inicialmente
Reglas para determinar asignación definitiva
Resumen
8. Conversiones
Conversiones implícitas
Conversiones de identidad
Conversiones implícitas numéricas
Conversiones implícitas de enumeración
Conversiones implícitas de referencia
Conversiones boxing
Conversiones implícitas de parámetro de tipo
Conversiones implícitas de expresión de constante
Conversiones implícitas definidas por el usuario
Conversiones explícitas
Conversiones explícitas numéricas
Tipo integral a tipo integral
Tipo decimal a integral
Tipo float/double a int
Double a float
Float/double a decimal
Decimal a float/double
Conversiones explícitas de enumeración
Conversiones explícitas de referencia
Conversiones unboxing
Conversiones explícitas de parámetro de tipo
Conversiones explícitas definidas por el usuario
Conversiones estándar
Conversiones implícitas estándar
Conversiones explícitas estándar
Conversiones definidas por el usuario
Conversiones implícitas definidas por el usuario
Conversiones anónimas de método
Conversiones de grupo de métodos
Conversiones de tipo null
Conversiones anulables
Resumen
9. Expresiones
Clasificaciones de expresiones
Resultados de una expresión
Valores de expresiones
Expresiones y operadores
Tres tipos de operadores
Precedencia y asociatividad de operadores
Sobrecarga de operadores
Resolución de sobrecarga de operador unario
Resolución de sobrecarga de operador binario
Promociones numéricas
Operadores unarios
Operadores de igualdad
Operadores relacionales
Búsqueda de miembros
Tipos base
Miembros de función
Invocación de operador
Listas de argumentos
Resolución de sobrecarga
Expresiones primarias
Literales
Nombres simples
Expresiones entre paréntesis
Acceso a miembros
Expresiones de llamada
Acceso a elementos
Acceso a tabla
Acceso a indexador
Acceso a this
Acceso a base
Operador new
Operador typeof
Operador sizeof
Operadores checked/unchecked
Expresión de valor predeterminada
Métodos anónimos
Expresiones unarias
Expresiones de conversión
Operadores aritméticos
Operadores de desplazamiento
Operadores relacionales y comprobación de tipos
Operadores lógicos
Operadores lógicos condicionales
Operador de fusión de nulos
Operadores de asignación
Expresiones
Expresiones constantes
Expresiones booleanas
Resumen
10. Sentencias
¿Qué son sentencias?
Sentencias C#
Punto final y alcance
Punto final
Alcance
Bloques de código
Listas de sentencias
Sentencias vacías
Sentencias con etiquetas
Sentencias de declaración
Declaraciones de variable local
Declaraciones de constante local
Sentencias de expresión
Sentencias de selección
La sentencia if
La sentencia switch
Sentencias de iteración
La sentencia while
La sentencia do
La sentencia for
La sentencia foreach
Sentencias de salto
La sentencia break
La sentencia continue
La sentencia goto
La sentencia return
La sentencia throw
La sentencia using
La sentencia yield
Resumen
11. Espacios de nombres
¿Qué son espacios de nombres?
Organizar clases
Controlar el ámbito
Unidades de compilación
Declaraciones de espacios de nombres
Directivas extern alias
Directivas using
Directivas using alias
Directivas using espacio de nombres
Miembros de espacios de nombres
Declaraciones de tipo
Miembro de alias cualificado
Resumen
12. Clases
¿Qué son clases?
Declaraciones de clase
Modificadores de clase
Especificación de clase base
Clases base
Implementaciones de interfaz
Cuerpo de la clase
Declaraciones partial
Miembros de clase
Herencia
Modificador new
Modificadores de acceso
Miembros estáticos y de instancia
Constantes
Campos
Campos estáticos y de instancia
Campos de sólo lectura
Campos volátiles
Inicialización de campos
Inicialización de variable
Métodos
Parámetros de método
Métodos estáticos y de instancia
Métodos virtuales
Métodos de reemplazo
Métodos sellados
Métodos abstractos
Cuerpo del método
Propiedades
Propiedades estáticas y de instancia
Descriptores de acceso
Descriptores de acceso virtual, sealed, override y abstract
Eventos
Eventos como campos
Eventos estáticos y de instancia
Descriptores de acceso virtual, sealed, override y abstract
Indexadores
Operadores
Operadores unarios
Operadores binarios
Operadores de conversión
Constructores de instancia
Constructores estáticos
Finalizadores
Resumen
13. Estructuras
¿Qué son estructuras?
Declaraciones de estructura
Modificadores de estructura
Interfaces de estructura
Cuerpo de la estructura
Miembros de estructura
Diferencias entre clase y estructura
Semántica de valor
Herencia
Asignaciones
Valores predeterminados
Boxing y unboxing
this
Inicializadores de campo
Constructores
Finalizadores
Constructores estáticos
Cuándo utilizar estructuras
Resumen
14. Tablas
¿Qué es una tabla?
Tipos de tabla
Tipo System.Array
Crear tablas
Acceder a los elementos de tabla
Miembros de tabla
Covarianza de tabla
Inicializadores de tabla
Comas finales
Resumen
15. Interfaces
¿Qué es una interfaz?
Definir una interfaz
Declaraciones de interfaz
Modificadores
Interfaces base explícitas
Cuerpo de la interfaz
Miembros de interfaz
Métodos de interfaz
Propiedades de interfaz
Eventos de interfaz
Resumen
16. Enumeraciones
Declaraciones de enumeración
Modificadores de enumeración
Miembros de enumeración
Cuidado con las referencias circulares
System.Enum
Valores y operaciones de enumeración
Resumen
17. Delegados
Delegados en acción
Declaraciones de delegado
Modificadores
Declarar delegados
Lista de invocación
Instanciar delegados
Resumen
18. Excepciones
Crear excepciones
System.Exception
Clases de excepción comunes
Gestionar excepciones
¿Qué sucede si no se encuentra ninguna cláusula catch?
Resumen
19. Atributos
Introducción a los atributos
Clases de atributo
Parámetros posicionales vs. con nombre
Uso de atributos
Tipos de parámetros de atributo
Especificación de atributos
Instancias de atributos
Compilación de atributos
Recuperación en tiempo de ejecución de instancias de atributo
Atributos reservados
El atributo Conditional
Métodos condicionales
Clases de atributo condicional
El atributo Obsolete
Resumen
20. Genéricos
Genéricos en C# vs. plantillas en C++
Ventajas de los genéricos
Declaraciones de clase genérica
Parámetros de tipo
Diferencias de parámetros de tipo
Tipos de instancia
Miembros de clase genérica
Campos estáticos en clases genéricas
Constructores estáticos en clases genéricas
Acceso a miembros protegidos
Sobrecarga en clases genéricas
Operadores en clases genéricas
Declaraciones de estructura genérica
Declaraciones de interfaz genérica
Implementaciones explícitas de miembro de interfaz
Declaraciones de delegado genérico
Tipos construidos
Argumentos de tipo
Tipos abiertos y cerrados
Miembros de tipos construidos
Utilizar directiva alias
Métodos genéricos
Firmas de método genérico
Métodos genéricos virtuales
Invocar métodos genéricos
Dónde no se utilizan genéricos
Restricciones
Resumen
21. Iteradores
Bloque de iterador
Bloques de iterador y errores en tiempo de compilación
Interfaces de enumerador
Interfaces enumerable
Tipo yield
This
Objetos de enumerador
El método MoveNext
Interrumpir la ejecución
La propiedad Current
El método Dispose
Objetos enumerables
Método GetEnumerator
Resumen
22. Código no seguro
¿Qué es código no seguro?
Ventajas y desventajas de código no seguro
Ventajas de código no seguro
Desventajas de código no seguro
Contextos del código no seguro
Fundamentos básicos de punteros
Punteros void
Operadores de puntero
Unsafe en acción
Utilizar el modificador fixed
Operador sizeof
Utilizar stackalloc
Compilar código no seguro
Resumen
Apéndices
A. Gramática C#
Gramática léxica
Comentarios
Identificadores
Palabras clave
Terminadores de línea
Literales
Operadores/Puntuadores
Directivas de preprocesamiento
Caracteres de escape Unicode
Espacio en blanco
Gramática sintáctica
Tablas
Atributos
Clases
Delegados
Enumeraciones
Expresiones
Genéricos
Interfaces
Sentencias
Estructuras
Tipos
Variables
Extensiones para código no seguro
B. Convenciones de nombrado
Uso de mayúsculas
PascalCase
CamelCase
Mayúsculas
Distinción entre mayúscula y minúscula
Abreviaturas
Palabras clave a evitar
Nombrar espacios de nombres
Nombrar clases
Nombrar interfaces
Nombrar atributos
Nombrar tipo de enumeración
Nombrar campos estáticos
Nombrar parámetros
Nombrar métodos
Nombrar propiedades
Nombrar eventos
C. Biblioteca estándar
D. Portabilidad
Aspectos generales de portabilidad
Portabilidad Plataforma/SO
Despliegue simplificado
Interoperabilidad con código heredado
Comportamiento indefinido
Comportamiento definido según implementación
Comportamiento inespecífico
Aspectos finales
E. Comentarios de documentación XML
Sintaxis
Etiquetas recomendadas
Índice alfabético
Como uno de los lenguajes de programación más destacado en estos momentos, C# le permite construir una amplia variedad de aplicaciones seguras y robustas que se ejecutan sobre la plataforma .NET Framework, incluidos servicios Web XML, aplicaciones cliente-servidor, aplicaciones de base de datos y mucho más. Ahora, con la aparición de C# 2005, encontrará un conjunto complejo de opciones y parámetros del nuevo lenguaje para crear aplicaciones más potentes si sabe cómo utilizarlas.
Combinando tutorial y referencia, este libro presenta las características más novedosas a la vez que explora el lenguaje desde sus bases. La primera parte le proporciona un conocimiento detallado de conceptos básicos de programación y le ayuda a adquirir las habilidades para escribir sus propias aplicaciones. La segunda parte presenta información detallada sobre las características específicas del lenguaje de modo que puede aprovechar inmediatamente todas las herramientas disponibles.