Imaginad una clase como la siguiente, que representa las características básicas de los archivos almacenados en una aplicación:
public class File
{
public string FileName { get; set; }
public ulong SizeBytes { get; set; }
}
Y ahora, imaginemos también una clase que hereda de la anterior para modelar específicamente, aunque también de forma resumida, los archivos de vídeo:
public class VideoFile: File
{
public string Codec { get; set; }
public TimeSpan Duration { get; set; }
}
Y puestos a imaginar, acabemos con el siguiente método, que retorna la representación JSON del objeto File
que recibe como parámetro:
string SerializeFile(File file) => JsonSerializer.Serialize(file);
Gracias al polimorfismo, ese pilar imprescindible de la Programación Orientada a Objetos, podríamos invocar este método con objetos de tipo File
, VideoFile
o cualquier descendiente de alguno de ambos, puesto que en todos los casos se trata de objetos de tipo File
:
var file = new File
{
FileName = "file.txt", SizeBytes = 1024
};
Console.WriteLine(SerializeFile(file));
var videoFile = new VideoFile
{
FileName = "video.mp4",
SizeBytes = 1024 * 1024,
Codec = "H264",
Duration = TimeSpan.FromMinutes(3)
};
Console.WriteLine(SerializeFile(videoFile));
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Inicializar a null propiedades sin tipo
José María Aguilar - Cómo saber si un objeto no es nulo (edición C# 9)
José María Aguilar
.NET Core / .NET
- Building a Dynamic Logical Expression Builder in C#
Yohan Malshika - Building Functional .NET Applications: a Guide for Choosing between Nahla Davies
- Detect Globalization-Invariant mode in .NET
Gérald Barré - Understanding the C# Init Operator
Bradley Wells - C# logging: Best practices in 2023 with examples and tools
Shane Duggan - How to Convert Stream to Byte Array in C#
Januarius Njoku - The Ultimate .NET Version Guide
Claudio Bernasconi - How to automatically update a Windows Forms Application?
Renato Ivanescu - .NET 7: Simplify Patch requests with PatchAsJsonAsync extension
Anthony Giretti - 6 useful extensions for IEnumerable
Steven Giesel - Understanding IOptions, IOptionsMonitor, and IOptionsSnapshot in .NET 7
Davide Bellone - Is WPF Dead? - The Current State of WPF [2023]
Claudio Bernasconi - Common C# exceptions and how to fix them
Carlos Schults - How does TryGetNonEnumeratedCount work?
Steven Giesel - How to Generate Permutations in C#
Matjaz Prtenjak - Refactor your .NET HTTP Clients to Typed HTTP Clients
Tim Deschryver - Feature toggle management in .NET Core
Krzysztof Begiedza - .NET Core–Monitor cache misses
Bart Wullems
Hace pocos meses hablábamos de la vuelta del clásico [OutputCache]
en ASP.NET Core 7 y veíamos cómo podía simplificarnos la vida a la hora de cachear en el servidor respuestas de peticiones.
Haciendo un rápido recordatorio, la novedad era la posibilidad de introducir en el pipeline el middleware OutputCacheMiddleware
, que se encargaría de almacenar las respuestas de endpoints y reutilizarlas en posteriores peticiones que cumplieran los requisitos apropiados.
Tras una semana de parón por una semanilla de relax en Roma (ciudad que, por cierto, os recomiendo que visitéis si no lo habéis hecho ya), ahí van los enlaces recopilados durante los últimos días. Como de costumbre, espero que os resulten interesantes. :-)
Por si te lo perdiste...
- ¿Comprometidos o involucrados?
José María Aguilar - Crear bloques de código Razor reutilizables en Blazor con Render Fragments
José María Aguilar
.NET Core / .NET
- Top 5: Errores de performance en C#
Fernando Escolar - Announcing .NET 8 Preview 4
Jon Douglas - Serilog project update, May 2023
Nicholas Blumhardt - Control Visual Studio from an external application
Gérald Barré - Seamlessly Import and Export CSV Data in Excel Using C#
Mohan Chandran - Prevent .NET Application Insights telemetry loss
Anthony Simmon - Exploring Code Performance Testing in C# with BenchmarkDotNet
Kostis Grontis - Why do we need Wait() and Pulse() Methods in C# Threading?
Kulasangar Gowrisangar - Introduction - Rust for C#/.NET Developers
Atif Aziz et al - Upcoming availability of .NET Framework 4.8.1 on Windows Update and Catalog
Brett Lopez - Multidimensional Array vs Jagged Array in C#
Dusko Mirkovic - URI Encode and Decode in .NET
Code Maze - Concurrent Hosted Service Start and Stop in .NET 8
Steve Gordon - Hot Reload Supports Modifying Generics!
Mikelle Rogers - Client Support for Calling WCF/CoreWCF with System.ServiceModel 6.0 Is Here!
Sam Spencer - C# Tip: Advanced Switch Expressions and Switch Statements using filters
Davide Bellone - TaskCompletionSource Pitfalls
Stephan Gay - Struct vs. Record vs. Class in C#
A. Yohan Malshika - An alternative approach to structuring your tests in XUnit
Bart Wullems - Exploring the C# Source Link Feature: Enhancing Debugging Experiences
Neel Bhatt - XML Serialization in C# .NET Core: A Comprehensive Guide
Sanjay M.
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Cómo mostrar por consola las líneas que se van añadiendo a logs o archivos de texto, en tiempo real
José María Aguilar - Métodos condicionales en .NET
José María Aguilar
.NET Core / .NET
- C# Record Type: Nondestructive Mutation, Equality, DTOs, and More
Bradley Wells - Verifying your DI Container
Steven Giesel - Reading Windows Application Manifest of an exe in .NET
Gérald Barré - Calling internal ctors in your unit tests”
Phil Haack - Using sizeof() Operator in C#
Code Maze - How to Create a Custom Slack Bot with .NET 7
Daniel Donbavand - How to convert audio to different formats using C# and FFmpeg
Niels Swimberghe - Dot Net Office : Top Microsoft NuGet Packages in 2023
Dot Net Office - Prevent a Hangfire job from running when it is already active
Tim Deschryver - Controlling the log level of your application
Steven Giesel
El 8 de mayo de 2006 decidí subir a un tren, teniendo más o menos clara la dirección, pero sin saber en qué parada me bajaría.
Cuando en aquél post inicial decía literalmente "espero que el viaje sea largo", probablemente no me refería a tan largo. Aún con la tenacidad de la que hacía gala, era imposible imaginar que diecisiete años después seguiría por aquí, contemplando el paisaje y escribiendo sobre lo que veo, intentando contribuir a una comunidad a la que tanto debo.
Más de 1.430 posts, más de 3.000 comentarios de lectores, más de cinco millones de consultas... pero sobre todo, muchísimo aprendido por el camino y, con suerte, espero que no solo por mi parte 😉