martes, 25 de abril de 2017
Pues ya con la séptima versión de C# en la calle, aparecida de la mano del flamante Visual Studio 2017, va siendo hora de echar un vistacillo rápido a las principales novedades que encontraremos en esta nueva iteración de nuestro lenguaje favorito.
Y hoy vamos a comenzar con las funciones locales, una nueva capacidad que nos permitirá crear funciones locales a un ámbito, y que no serán visibles desde fuera de éste. Por ejemplo, podemos crear funciones en el interior de métodos, constructores, getters o setters, etc., pero éstas sólo serán visibles desde el interior del miembro en el que han sido declaradas.
Puede ser útil en determinados escenarios, puesto que evitan la introducción de "ruido" en las clases cuando determinado código sólo se va a consumir en el interior de un método, y al mismo tiempo pueden contribuir a mejorar la legibilidad y robustez del código.
Y hoy vamos a comenzar con las funciones locales, una nueva capacidad que nos permitirá crear funciones locales a un ámbito, y que no serán visibles desde fuera de éste. Por ejemplo, podemos crear funciones en el interior de métodos, constructores, getters o setters, etc., pero éstas sólo serán visibles desde el interior del miembro en el que han sido declaradas.
Puede ser útil en determinados escenarios, puesto que evitan la introducción de "ruido" en las clases cuando determinado código sólo se va a consumir en el interior de un método, y al mismo tiempo pueden contribuir a mejorar la legibilidad y robustez del código.
lunes, 24 de abril de 2017
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET/.NET Core
- The week in .NET – Happy birthday .NET with Robin Cole, TinyORM, 911 Operator
Bertrand Le Roy - Covariant and Contravariant Casting is 3x Slower than Dynamic
Daniel Cabtree - Spans and ref part 1 : ref
Marc Gravell - A tricky bit of code
Ayende Rahien - A C# developers guide to F#
Connel Hooley - Exploring Tuples as a Library Author
Marc Gravell - .NET Code Quality 3rd Party Tools – Using NDepend with .Net Core
Daniel Jimenez Garcia - What is an Unhandled Exception, and How to Catch All C# Exceptions
Matt Watson - Value Tuples in C# 7: Please Tell Me I'm Doing This Wrong
Jeremy Bytes - Emojis and String.Length
Spencer Schneidenbach - C# Tuples: New C# 7 language feature
Matthew D. Groves - C# Futures: Nullable Reference Types
Jonathan Allen - How to Generate C# Random Numbers, Pseudo vs Secure Random Numbers
Matt Watson
martes, 18 de abril de 2017
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET/.NET Core
- The week in .NET – .NET Framework 4.7, reference documentation, On .NET on modular ASP.NET, Happy birthday .NET with Immo Landwerth, JustAssembly
Bertrand Le Roy - Casting to IEnumerable<T> is Two Orders of Magnitude Slower
Daniel Cabtree - MailKit Officially Replaces .NET’s SmtpClient
Jonathan Allen - Creating and editing solution files with the .NET CLI
Andrew Lock - .NET Framework April 2017 Monthly Rollup
Rich Lander - .NET Futures: Multiple Inheritance
Jonathan Allen - Extending .NET CLI with custom tools - dotnet init initializes your NuGet package
Maarten Balliauw - Exceptionless - better logging for .NET & JavaScript
Michal Dymel - How to Create .NET Core Windows Services with Visual Studio 2017
Matt Watson - Performant text processing in C#
Christopher Wright - Method overload resolution in C# 6.0: an interesting bug story
Miłosz Piechocki
lunes, 10 de abril de 2017
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET/.NET Core
- Announcing the .NET Framework 4.7
Rich Lander - C# 7: Is Operator Patterns - You won't need 'as' as often & Micro-Benchmarking the Three Ways to Cast Safely
Daniel Cabtree - The week in .NET – On .NET on SonarLint and SonarQube, Happy birthday .NET with Dan Fernandez, nopCommerce, Steve Gordon
Bertrand Le Roy - Understand monads with LINQ
Miłosz Piechocki - Announcing a unified .NET reference experience on docs.microsoft.com
Jeff Sandquist - Black Art – LINQ expressions reuse
Asher Barak - Getting All the Results in LINQ with Methods
Peter Vogel - C# Exception Handling Best Practices
Matt Watson - C# 7.0: Tuple literals
Gunnar Peipman - No GCs for your allocations?
Maoni Stephens - A Quick and Dirty Extension Method to Get the Full Exception Details, Including Inner Exceptions
Barco Bertschi
martes, 4 de abril de 2017
Como sabemos, tradicionalmente los controladores MVC son clases cuyo nombre, según la convención, debe finalizar por “Controller”, como en
Sin embargo, desde las primeras versiones del framework la convención era modificable y podíamos adaptarla a nuestras necesidades aprovechando la extensibilidad del framework. De hecho, ya vimos hace muuucho mucho tiempo cómo hacerlo con la versión "clásica" de ASP.NET MVC, pero con la llegada de MVC Core las cosas han cambiado bastante.
En este post vamos a ver cómo modificar la convención de nombrado de controladores a algo más patrio: haremos que éstos puedan llamarse “ControladorDeXYZ”, como en
Pero antes de ponernos a ello, permitidme aclarar que cambiar las convenciones de nombrado de controladores no es muy conveniente porque, aparte de romper el principio de la mínima sorpresa, hay herramientas que podrían dejar de funcionar correctamente, pero sin duda hacerlo ofrece una magnífica ocasión para profundizar un poco en los entresijos del framework ;)
InvoiceController
o CustomerController
, y esta convención ha continuado en ASP.NET Core MVC, la edición más reciente del framework.Sin embargo, desde las primeras versiones del framework la convención era modificable y podíamos adaptarla a nuestras necesidades aprovechando la extensibilidad del framework. De hecho, ya vimos hace muuucho mucho tiempo cómo hacerlo con la versión "clásica" de ASP.NET MVC, pero con la llegada de MVC Core las cosas han cambiado bastante.
En este post vamos a ver cómo modificar la convención de nombrado de controladores a algo más patrio: haremos que éstos puedan llamarse “ControladorDeXYZ”, como en
ControladorDeFacturas
o ControladorDeClientes
. Es decir, si tenemos una clase como la siguiente, pretendemos que una petición hacia "/facturas/index" retorne el texto "ControladorDeFacturas.Index":public class ControladorDeFacturas : Controller { public IActionResult Index() { return Content("ControladorDeFacturas.Index"); } }Por supuesto, podríamos hacer que esta clase fuera un controlador simplemente aplicándole el atributo
[Controller]
, pero el objetivo de este post es aprender algo sobre el funcionamiento interno del framework, así que no vamos a quedarnos con esta solución tan sencilla ;)Pero antes de ponernos a ello, permitidme aclarar que cambiar las convenciones de nombrado de controladores no es muy conveniente porque, aparte de romper el principio de la mínima sorpresa, hay herramientas que podrían dejar de funcionar correctamente, pero sin duda hacerlo ofrece una magnífica ocasión para profundizar un poco en los entresijos del framework ;)
lunes, 3 de abril de 2017
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET/.NET Core
- The week in .NET – On .NET with Sidharth Gupta on Tizen, Happy birthday .NET with Bertrand Le Roy, JSON.NET 10, Gunnar Peipman
Bertrand Le Roy - Linq performance improvements in .NET Core
Thomas Levesque - Deconstructors for non-tuple types in C# 7.0
Andrew Lock - Externalizing the HttpClient internals for fun & profit
Ayende Rahien - Open sourcing the MSTest Test Framework
Brian Harry - Modeling Battleship in C# - Introduction and Strategies & Components and Setup
Matthew P. Jones - Validate your AutoMapper mappings
Christiaan van Bergen