Course curriculum

  • 1

    1. Introducción

    • 1.1. Introducción y bienvenida

    • 1.2. Qué es dotNet

    • 1.3. Qué es C-sharp

    • 1.4. Visual Studio y VSCode

    • 1.5. Instalando VIsualStudio

    • 1.6. Instalando Visual Studio Code

    • 1.7. Creación de app de consola con Visual Studio

    • 1.8. Creación de app de consola con Visual Studio Code y dotnet CLI

    • 1.9. La Estructura de Nuestra Solución

    • 1.10. Resumen

    • 1.11. Ejercicios - Explicación

    • Repositorio del curso

  • 2

    2. Variables

    • 2.1. Variables

    • 2.2. Creando el proyecto

    • 2.3. Sentencias de alto nivel

    • 2.4. Sintaxis Básica de Csharp

    • 2.5. Dónde Encontrar el Código del Curso

    • 2.6. Introducción a las Variables - Números Enteros

    • 2.7. Otros Tipos de Dato de Números Enteros

    • 2.8. Números Reales o Punto-Flotantes

    • 2.9. Booleanos

    • 2.10. char y strings - Secuencias de Escape

    • 2.11. Strings Verbatim

    • 2.12. Introducción a DateTime

    • 2.13. Nombres de variables

    • 2.14. Variables Implícitamente Tipadas

    • 2.15. Valores por Defecto

    • 2.16. Nulo - Tipos de Valor y Tipos de Referencia

    • 2.17. Nulificables - Tipos de Referencia no Nulos

    • 2.18. Operaciones Binarias

    • 2.19. Otras Operaciones Binarias

    • 2.20. Operaciones Binarias y Aproximaciones

    • 2.21. Overflow Aritmético

    • 2.22. Interpolación de strings

    • 2.23. Operaciones Unarias

    • 2.24. Expresiones void

    • 2.25. Operaciones de Asignación

    • 2.26. Orden de Precedencia de las Operaciones - Legibilidad

    • 2.27. Constantes y Valores Mágicos

    • 2.28. Advertencias y Errores

    • 2.29. Resumen

  • 3

    3. Decisiones e iteraciones

    • 3.1. Introducción

    • 3.2. Creando la app del módulo

    • 3.3. Lógica Booleana

    • 3.4. Operadores Condicionales Booleanos

    • 3.5. Condicional if

    • 3.6. Operador Ternario

    • 3.7. Sentencia Switch

    • 3.8. Patrones Relacionales

    • 3.9. Patrones Lógicos

    • 3.10. Expresiones Switch y Discard

    • 3.11. Bucle while

    • 3.12. Bucle do-while

    • 3.13. Bucle for

    • 3.14. Bucle for each

    • 3.15. Sentencias de Saltos - Break y Continue

    • 3.16- Bucles infinitos

    • 3.17. Resumen

  • 4

    4. Más acerca de tipos de datos

    • 4.1. Introducción

    • 4.2. Creando la app

    • 4.3. ToString

    • 4.4. Casteos

    • 4.4.Parse y TryParse

    • 4.5. Enums

    • 4.6. Introducción a los arreglos

    • 4.7. Índices

    • 4.8. Rangos

    • 4.9. Arreglos multidimensionales

    • 4.10. Arreglos de arreglos

    • 4.11. Manipulando strings

    • 4.12. Resumen

  • 5

    5. Funciones

    • 5.1. Introducción

    • 5.2. Creando la app

    • 5.3. Declarando Funciones

    • 5.4. Alcance de las variables

    • 5.5. Parámetros

    • 5.6. Parámetros opcionales

    • 5.7. Arreglos como parámetros

    • 5.8. Pasando Tipos de Referencia

    • 5.9. Parámetros out

    • 5.10. Tuplas

    • 5.11. Funciones locales

    • 5.12. Expresiones lambda

    • 5.13. Action

    • 5.14. Func

    • 5.15. Predicados

    • 5.16. Delegados

    • 5.17. Funciones anónimas

    • 5.18. Función Main

    • 5.19. Funciones

  • 6

    6. Clases, structs y records

    • 6.1. Introducción

    • 6.2. Creando la App

    • 6.3. Clases y Campos

    • 6.4. Propiedades

    • 6.5. Métodos

    • 6.6. Constructores

    • 6.7. Clases como Valores de Salida

    • 6.8. Deconstructores

    • 6.9. Clases y Miembros Estáticos

    • 6.10. Métodos de Extensión

    • 6.11. Patrones de Propiedad

    • 6.12. Tipos Anónimos

    • 6.13. Namespaces y la directiva using

    • 6.14. Using-s Implícitos y Globales

    • 6.15. Clases Parciales

    • 6.16. Structs

    • 6.17. Igualdad - Clases y Structs

    • 6.18. Introducción a los Records

    • 6.19. Creando un Record

    • 6.20. Records Posicionales

    • 6.21. Clonando Records - Mutación no Destructiva

    • 6.22. Propiedades Inmutables en Clases con Init

    • 6.23. El operador de Elvis

    • 6.24. El Operador de Coalescencia Nula

    • 6.25 Perdonando el Nulo y nameof

    • 116- Resumen

  • 7

    7. Programación orientada a objetos

    • 7.1. Introducción

    • 7.2. ¿Qué es la Programación Orientada a Objetos_

    • 7.3. Creando la App

    • 7.4. Introducción a la Herencia

    • 7.5 Sobrescribiendo Métodos_ Virtual

    • 7.6. Clases Abstractas

    • 7.7. Sellando Clases con Sealed

    • 7.8. Constructor en la Clase Base

    • 7.9. La Clase Base de Todas las Clases_ Object

    • 7.10. Casteando a Object

    • 7.11. Límites de Herencia

    • 7.12. Herencia con Records

    • 7.13. Herencia con Structs

    • 7.14. Introducción a los Modificadores de Acceso

    • 7.15. Public

    • 7.16. Private

    • 7.17. Internal

    • 7.18. Protected

    • 7.19. Protected Internal

    • 7.20. Private Protected

    • 7.20. Introducción a las Interfaces

    • 7.21. Nuestra Primera Interfaz

    • 7.22. Polimorfismo Con Interfaces

    • 7.23. Compartiendo Código de una Manera Flexible

    • 7.24. Introducción a la Inyección de Dependencias

    • 7.25. Inyección por el Constructor

    • 7.26. Contenedor de Inversión de Controles

    • 7.27. Implementaciones por Defecto en Interfaces

    • 7.28. Sobrecarga de Operadores

    • 7.29. Igualdad de Structs

    • 7.30. Igualdad de Clases

    • 7.31. Resumen

  • 8

    8. Debugging y manejo de errores

    • 8.1. Introducción

    • 8.2. Creando la App

    • 8.3. Debug WriteLine

    • 8.4. Mensajes de Log con Tracepoints

    • 8.5. Breakpoint Normal

    • 8.6. Breakpoint Temporal

    • 8.7. Breakpoint Condicional

    • 8.8. Breakpoint dependiente

    • 8.9. Valores de Variables

    • 8.10. Ventana Inmediata

    • 8.11. Ventana Call Stack

    • 8.12. Lanzando Excepciones

    • 8.13. Atrapando Excepciones con try-catch

    • 8.14. Bloque finally

    • 8.15. Excepciones por defecto

    • 8.16. Excepciones Personalizadas

    • 8.17. Filtros de Excepción

    • 8.18. Relanzando Excepciones

    • 8.19. Resumen

  • 9

    9. Genéricos y colecciones

    • 9.1. Introducción

    • 9.2. Creando la App

    • 9.3. Introducción a los Genéricos

    • 9.4. Restricciones a los Genéricos

    • 9.5. Colecciones - Listado

    • 9.6. Diccionarios

    • 9.7. GetHashCode

    • 9.8. IEnumerable

    • 9.9. yield y Ejecución Diferida

    • 9.10. yield y Bucles Infinitos

    • 9.11. Comparaciones Personalizadas con IComparable y IComparer

    • 9.12. Resumen

  • 10

    10. Introducción a LINQ

    • 10.1. Introducción

    • 10.2. Creando la App

    • 10.3. ¿Qué es LINQ_

    • 10.4. Ejecución Diferida

    • 10.5. Filtrando con la Función Where

    • 10.6. First y FirstOrDefault

    • 10.7. Ordenando con OrderBy

    • 10.8. Proyectando con Select

    • 10.9. Haciendo Productos Cartesianos con SelectMany

    • 10.10. Funciones Escalares_ Conteo, Sumar, Mínimo, Máximo y Promedio

    • 10.11. MinBy y MaxBy

    • 10.12. Cuantificadores Universales_ All, Any y Contains

    • 10.13. Take y Skip

    • 10.14. Agrupando con GroupBy

    • 10.15. Eliminando Repetidos con Distinct y DistinctBy

    • 10.16. Función Chunk

    • 10.17. Resumen

  • 11

    11. Trabajando con archivos

    • 11.1. Introducción

    • 11.2. Creando la App

    • 11.3. Clase File

    • 11.4. Clase Directory

    • 11.5. Clase Path

    • 11.6. Introducción a los Streams

    • 11.7. Escribiendo Archivos con StreamWriter

    • 11.8. Introducción al IDisposable

    • 11.9. De Listado a Archivo de Texto

    • 11.10. Creando un CSV

    • 11.11. StreamReader y Stopwatch - Lectura Rápida

    • 11.12. Serializando y Deserializando - Formato JSON

    • 11.13. Resumen

  • 12

    12. Concurrencia

    • 12.1. Introducción

    • 12.2. Qué es la Concurrencia

    • 12.3. Introducción a la Programación en Paralelo

    • 12.4. Introducción a la Programación Asíncrona

    • 12.5. Operaciones I/O vs CPU

    • 12.6. Creando la App de WinForms

    • 12.7. UI Que Se Congela

    • 12.8. async-await

    • 12.9. Ejemplo de Programación Asíncrona

    • 12.10. Introducción a Task

    • 12.11. Tareas Simultáneas con Task.WhenAll

    • 12.12. Descargando Imágenes de Manera Simultánea

    • 12.13. ¿Qué es el Parallel.For?

    • 12.14. Multiplicar Matrices en Paralelo

    • 12.15. Task.WhenAll vs Parallel.For

    • 12.16. Métodos Atómicos

    • 12.17. Seguridad en Hilos

    • 12.18. Condición de Carrera

    • 12.19. Interlocked

    • 12.20. Lock

    • 12.21. Resumen

  • 13

    13. ADO.NET y bases de datos

    • 13.1. Introducción

    • 13.2. Qué es ADO.NET

    • 13.3. Instalando SQL Server

    • 13.4. Creando la Base de Datos

    • 13.5. Creando la App del Módulo

    • 13.6. Creando la Cadena de Conexión

    • 13.7. Conectándonos a la Base de Datos Desde Nuestra App de C-

    • 13.8. Usando Proveedores de Configuración

    • 13.9. Insertando Datos en una Tabla

    • 13.10. Pasando Parámetros a un Query

    • 13.11. Invocando un Procedimiento Almacenado de Insercion de Datos

    • 13.12. Parámetros OUTPUT

    • 13.13. Obteniendo un Escalar

    • 13.14. Usando un DataTable

    • 13.15. DataTables y Procedimientos Almacenados

    • 13.16. Convirtiendo un DataTable a Listado

    • 13.17. Usando un DataSet

    • 13.18. Resumen

  • 14

    14. Reflexión y metadatos

    • 14.1. Introducción

    • 14.2. Creando la App

    • 14.3. ¿Qué es la Reflexión_

    • 14.4. Propiedades de Type - Obteniendo un Campo con Reflexión

    • 14.5. Instanciando Tipos Usando Reflexión

    • 14.6. Invocando Métodos Usando Reflexión

    • 14.7. Obteniendo Tipo Base e Interfaces - IsAssignableFrom y IsAssignableTo

    • 14.8. Introducción a los Atributos

    • 14.9. Atributos Personalizados

    • 14.10. Utilizando dynamic

    • 14.11. Utilizando ExpandoObject

    • 14.12. Introducción a los Generadores de Código

    • 14.13. Ejemplo de Generador de Código

    • 14.14. Resumen

  • 15

    15. Temas adicionales y fin del curso

    • 15.1. Introducción

    • 15.2. Creando la App del Módulo

    • 15.3. Introducción al HttpClient - GetAsync y GetStringAsync

    • 15.4. Usando GetFromJsonAsync

    • 15.5. Haciendo un HTTP Post

    • 15.6. Parseando los Errores del Web API

    • 15.7. Enviando Cabeceras

    • 15.8. Introducción al HttpClientFactory

    • 15.9. Clientes Nombrados

    • 15.10. Clientes Tipados

    • 15.11. Enviando un Archivo

    • 15.12. Descargando un Archivo

    • 15.13. Introducción a los Eventos

    • 15.14. Eventos y Timers

    • 15.15. Alias de Namespaces

    • 15.16. Operador Calificador de Alias de Namespace

    • 15.17. Resumen