Translate

sábado, 19 de noviembre de 2022

C# 11 y .NET 7 traen análisis genérico


Uno de los patrones de diseño básicos en .NET es la función Parse estática. Prácticamente todas las clases que se pueden instanciar a partir de una cadena tienen una. Sin embargo, antes de C# 11 y .NET 7, no había forma de crear una interfaz que se adaptara a esto.

El problema fundamental es que antes de ahora, las interfaces abstractas (es decir, la palabra clave de la interfaz) no admitían funciones estáticas. Esto no era solo una limitación de C#, el CLR en sí no lo admitía antes de la introducción de la característica de métodos abstractos estáticos en las interfaces. Al igual que con los métodos de interfaz, los métodos abstractos estáticos pueden tener una implementación predeterminada, pero existen limitaciones.

Veamos interfaz IParsable<TSelf> ofrece dos métodos, Parse y TryParse. Ambos aceptan un String y un IFormatProvider. Para acceder a ellos, necesita un método de ayuda genérico como:


static T Parse<T>(string s, IFormatProvider? provider)

    where T : IParsable<T>

{

    return T.Parse(s, provider);

}


Se puede invocarlo usando un parámetro de tipo.


var a = Parse<int>("4", null);