
En este video te explicare el objetivo de este curso de C# Avanzado.
En esta clase veremos lo que son los paradigmas de programación.
En esta clase veremos lo que es la programación estructurada
En esta clase veremos como crear un proyecto en visual studio para C# .NET
En esta clase veremos el concepto de variable, las cuales nos acompañarán a lo largo de todo código que hagamos en C#.
En esta clase veremos lo que son los arrays, los cuales nos permitirán guardar colecciones de valores.
En esta clase veremos las sentencias condicionales, las cuales nos servirán para dar nuevos escenarios al flujo de nuestro programa.
En esta clase veremos las sentencias de iteración o repetición.
En esta clase veremos el concepto de funciones en programación.
En esta clase veremos un ejemplo de programa utilizando solo programación con él paradigma estructurado.
En esta clase veremos que es el paradigma orientado a objetos
En esta clase veremos lo que son las clases y objetos
En esta clase veremos los métodos constructores de clases
En esta clase vamos a ver que son los campos y propiedades, estas segundas algo que existe en C# y nos dan flexibilidad a la hora de manejar la información de nuestros objetos.
En esta clase veremos los espacios de nombres.
En esta clase veremos el concepto de herencia en programación orientada a objetos.
En esta clase veremos el concepto de encapsulamiento en programación orientada a objetos.
En esta clase veremos la sobrecarga de métodos, una cualidad de la programación orientada a objetos que permite tener métodos con el mismo nombre pero con distinto comportamiento.
En esta clase veremos la sobreescritura de métodos, una característica que tiene la programación orientada a objetos para poder remplazar métodos de las clases padres.
En esta clase veremos el concepto de abstracción y el uso de clases abstractas.
En esta clase veremos el polimorfismo con clases abstractas, una forma de tener comportamientos distintos en nuestros objetos.
En esta clase vamos a ver el concepto de Interface, las cuales son la base de la Arquitectura de Software.
En esta clase veremos los Generics, un mecanismo para reutilizar funcionamiento sin estar ligado al tipo de dato.
En esta clase veremos la definición static, con la cual las propiedades y métodos pertenecen a la clase y no al objeto.
En esta clase veremos que es el paradigma funcional
En esta clase veremos lo que define a una función pura en programación funcional.
En esta clase veremos que es una función de primera clase.
En esta clase veremos los delegados, un tipo de mecanismo que tiene C# para definir tipos de funciones.
En esta clase veremos las expresiones lambda, útiles para crear funciones anónimas.
En esta clase veremos como definir tipos de funciones que retornan siempre un valor utilizando el delegado definido Func.
En esta clase vamos a ver lo que es una función de orden superior.
En esta clase veremos el tipo de delegado Predicate, el cual es utilizado para condiciones.
A partir de esta sección comienzan los conceptos de C# Avanzado
En esta clase veremos que son y para que sirven los Generics en C#.
En esta clase veremos como usar Generics en métodos.
En esta clase veremos el uso de Generics en Interfaces.
En esta clase veremos como aplicar Generics en delegados.
En esta clase veremos la restricción de tipos en Generics.
En esta clase veremos la restricción de Generics por clase e interface.
En esta clase veremos la restricción de constructor en los Generics.
En esta clase veremos como hacer restricciones múltiples en los Generics
En esta clase vamos a ver la covarianza en generics.
En esta clase veremos la contravarianza en generics.
En esta clase veremos que son los métodos de extensión, una alternativa a la herencia, para incrementar funcionamiento.
En esta clase veremos como utilizar métodos de extensión en clases propias.
En esta clase veremos como hacer métodos de extensión los cuales puedan recibir parametros.
En esta clase vamos a ver como combinar el concepto de Generics con los métodos de extensión.
En esta clase veremos como utilizar Generics con restricciones en métodos de extensión.
En esta clase veremos como utilizar métodos de extensión en interfaces.
En esta clase veremos como con métodos de extensión podemos aplicar patrones de encadenamiento de métodos.
En esta clase veremos lo que es el paso por valor y por referencia en programación.
En esta clase veremos el uso de const y readonly para hacer elementos inmutables, al igual que veremos sus diferencias.
En esta clase veremos como hacer inmutabilidad por medio de propiedades de solo lectura.
En esta clase veremos como hacer listas inmutables.
En esta clase veremos el uso del patrón With para clonar objetos.
En esta clase veremos como hacer objetos anónimos y su inmutabilidad.
En esta clase veremos que son los records en C#.
En esta clase veremos como los records hacen su comparación por valor y no por referencia.
En esta clase veremos como se comporta la comparativa de records compuestos.
En esta clase veremos como aplicar deconstructing a records.
En esta clase veremos como crear propiedades mutables en records.
En esta clase veremos como clonar records por medio de la expresión with.
En esta clase veremos lo que son los closures.
En esta clase veremos como implementar una función Map() en C#
En esta clase veremos como implementar una función Filter en C#.
En esta clase vamos a ver como implementar un Reduce en C#.
En esta clase veremos que es la composición de funciones.
En esta clase vamos a programar un Pipe para encadenar funcionamiento.
En esta clase vamos a ver como mejorar nuestra función Pipe por medio de Generics.
En esta clase vamos a implementar Pipe para encadenar funciones de distinto tipo.
En esta clase veremos la técnica de currificación en C#.
En esta clase veremos una técnica poderosa llamada Memoization.
En esta clase veremos memoización en un caso más realista.
En esta clase veremos como podemos implementar Memoización con Generics para reutilizar el código en distintos escenarios.
En esta clase veremos como implementar Memoización con asincronía.
En esta clase veremos como implementar Functors en C#
En esta clase vamos a implementar un Maybe Functor, con el objetivo de ver un problema que surge en esta técnica.
En esta clase vamos a implementar una Monad, con la cual vamos a corregir las deficiencias que tienes los functores.
En esta clase veremos que es la programación concurrente.
En esta clase veremos la diferencia que existe entre algo concurrente y algo paralelo.
En esta clase comenzaremos a ver para que sirve Task en C#
En esta clase veremos como se utiliza async y await junto a métodos que retornan Task.
En esta clase veremos como Task puede envolver un dato por medio de su flexibilidad con Generics.
En esta clase veremos como podemos encadenar tareas asíncronas por medio del método ContinueWith().
En esta clase veremos el método WhenAll con el cual podemos ejecutar un listado de Task.
En esta clase veremos como usar Hilos con Thread en C#.
En esta clase veremos las principales diferencias de Thread y Task.
En esta clase veremos como ejecutar procesos paralelos por medio de Parallel.For.
En esta clase veremos como ejecutar procesos paralelos utilizando Parallel.ForEach
En esta clase vamos a ver como realizar procesos paralelos que aprovechen el funcionamiento asíncrono de Task, gracias al método ForEeachAsync.
En este curso me he enfocado a conceptos que son poco conocidos del lenguaje de programación C#.
Abordaremos temas de programación orientada a objetos profundizando en el tipado genérico, toda una sección se enfoca al tipado genérico, lo cual te permitirá entender las bases con las que esta construida mucha biblioteca que utilizas día a día como programador de .NET.
También existe una sección de programación funcional avanzada, donde veremos conceptos pocas veces abordados en los cursos de programación general, y que te brindarán otra forma de resolver problemas.
Una de las secciones se enfoca a la extensión de métodos, con lo cual podrás crear tus propias bibliotecas extendiendo funcionamiento de cosas ya compiladas.
En otra sección nos enfocamos al concepto de inmutabilidad, uno de los conceptos que son una debilidad de mucho programador, en esta sección veremos técnicas que nos ayudarán a proteger información haciéndola inmutable, así como profundizar en entidades añadidas a partir de C# llamadas records, los cuales son inmutables.
En este curso me he enfocado a enseñar estos y más conceptos, ya que son conceptos necesarios para dar un salto de nivel como programador, al dominar dichos conceptos, te permitirá comprender como esta construido mucho funcionamiento que utilizas, y sobre todo, como están hechas muchas cosas de .NET.