Esa no lo conocia, buena clase de hoy
Introducción
Todo lo que aprenderás sobre C#
Etapa 5 – POO reutilicemos nuestro código
Reutilizando nuestro Código
Herencia
Polimorfismo
Problemas del polimorfismo
Lista de Objetos polimórfica
Utilizando ToString para mejorar la depuración
Etapa 6- Ajustes y funcionalidad
Implementación de interfaces
Uso de interfaces
Creación y uso de regiones
Etapa 7 – Preparando información para nuestros reportes
Parámetros de salida
Probando funcionalidades de parámetros de salida
Sobrecargas de métodos
Listas de solo Lectura
Diccionario Polimórfico
Implementación de un diccionario
Uso de numeraciones en diccionario
Introduciendo datos en un diccionario
Recorrido de datos en diccionario
Impresión de objetos de un diccionario
Uso de la sentencia switch
Eventos
Recapitulemos
Etapa 8 – Consultas
Creación del reporteador
Extrayendo datos de un diccionario de manera segura
Aprendiendo linq
Sentencia where de linq
Divide y triunfarás
Agrupamientos en linq
Tipos anónimos en consultas linq
Segundo Reto
Etapa 9 – Creando una UI de Consola
Excepciones y cascadeo de excepciones
Sentencia finally
Reto final
Cierre del curso
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Juan Carlos Ruiz
Nuestro método GetObjetoEscuela nos regresa una lista que debe utilizarse solo para lectura de objetos, sin embargo, al regresar un objeto tipo List es posible para el desarrollador añadir nuevos objetos. Podemos solucionar esto cambiando el tipo List por IReadOnlyList.
Recuerda que una buena practica para las listas de datos que son de manera publica es regresar un tipo de lista genérico, como IEnumerable y en los casos donde serán de solo lectura regresar un tipo IReadOnlyList.
Aportes 21
Preguntas 2
Esa no lo conocia, buena clase de hoy
Puedes crear objetos de tipo List<T> sin embargo no puedes crear objetos de tipo IEnumerable<> ya que al ser una interfase es abstracta y no puede ser instanciada
List es una clase. IEnumerable<> es una interface.
Definicion IreadOnlyList
aqui hay algo https://codeday.me/es/qa/20190411/473793.html
otras definiciones mas faciles https://www.youtube.com/watch?v=hhmdsGStDGQ
Si una interfaz es solo un contrato que contiene las propiedades y firmas de métodos, ¿Por qué al utilizar IReadOnlyList si se desempeña una funcionalidad desde una interfaz?, he visto lo mismo haciendo uso de otras interfaces para extender funcionalidad no solo firmas.
Recuerda que una buena practica para las listas de datos que son de manera publica es regresar un tipo de lista genérico, como IEnumerable y en los casos donde serán de solo lectura regresar un tipo IReadOnlyList.
No devolver un tipo especifico sino un tipo de lista generico. Devolver un IEnumerablle Sino quiero que se pueda modificar devolver un IReadOnlyList.
Recuerda que una buena practica para las listas de datos que son de manera publica es regresar un tipo de lista genérico, como IEnumerable y en los casos donde serán de solo lectura regresar un tipo IReadOnlyList.
Nuestro método GetObjetoEscuela nos regresa una lista que debe utilizarse solo para lectura de objetos, sin embargo, al regresar un objeto tipo List es posible para el desarrollador añadir nuevos objetos. Podemos solucionar esto cambiando el tipo List por IReadOnlyList.
Para que una lista sea de solo lectura, debe ser de tipo IReadList
Modificacion de esta clase
var diccionario = new Dictionary<LlaveDiccionario, IEnumerable<ObjetoEscuelaBase>>();
diccionario.Add(LlaveDiccionario.Escuela, new[] { Escuela });
diccionario.Add(LlaveDiccionario.Curso, Escuela.Cursos.Cast<ObjetoEscuelaBase>());
var listatmp = new List<Evaluación>();
var listatmpas = new List<Asignatura>();
var listatmpal = new List<Alumno>();
foreach (var cur in Escuela.Cursos)
{
listatmpas.AddRange(cur.Asignaturas);
listatmpal.AddRange(cur.Alumnos);
foreach (var alum in cur.Alumnos)
{
listatmp.AddRange(alum.Evaluaciones);
}
}```
Interfaz de solo lectura: IReadOnlyList o IReadOnlyCollection
Listas solo de Lectura
Representa una colección de elementos de solo lectura a los que se puede tener acceso por un índice.
Para utilizar una lista de lectura se debe utilizar la palabra reservada “IReadOnlyList<Objeto>”.
Ejemplo:
public IReadOnlyList<ObjetoEscuelaBase> GetObjetosEscuela()
{
return listaObj.AsReadOnly():
}
Al momento de devolver la lista se debe utilizar la función “AsReadOnly()” para indicar que la lista es “solo de lectura”, así coincide con el método.
Las listas de “solo lectura” no permiten agregar nuevos elementos.
La forma de trabajar al momento de exponer datos de forma “pública”, es decir, cuando otros desarrolladores los van a consumir la práctica por defecto es la siguiente:
No devolver un tipo de lista específico, debe ser un tipo de lista “genérico” puede ser un IEnumerable y que el desarrollador lo convierta en la lista que necesite.
Si no es la intención que la lista se modifique se debe enviar un tipo de lista IReadOnlyList.
Interesante, muy bien
En este caso considero que seria como implementar listas genericas
Definicion: Represents a strongly typed list of objects that can be accessed by index. Provides methods to search, sort, and manipulate lists.
coolll … aprendiendo ando
No sabia que se podia hacer eso, buena practica.
Muy buena practica el utilizar IReadOnlyList, ahora comenzaré a implementar dicha practica para proteger mis listas
Muy buena clase.
Muy buenos consejos, me encanto esta clase!
No conocia IReadOnlyList y no sabia las ventajas de utilizar IEnumerable.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?