c# ¿Es posible crear método-extensión-constructor? ¿cómo?



2 Answers

La respuesta de SWeko es básicamente correcta, aunque, por supuesto, el artículo al que se refiere trata sobre las propiedades de extensión en lugar de los constructores de extensión.

También hicimos un diseño aproximado para constructores de extensión al mismo tiempo que hicimos las propiedades de extensión; Serían un buen azúcar sintáctico para el patrón de fábrica. Sin embargo, nunca pasaron la etapa de diseño; La característica, aunque agradable, no es realmente necesaria y no permite nuevos escenarios asombrosos.

Si tiene un problema realmente impresionante que los constructores de extensiones resolverían, me encantaría escuchar más detalles. Cuantos más comentarios del mundo real recibamos, mejor podremos evaluar los méritos relativos de los cientos de sugerencias de características diferentes que recibimos cada año.

c# constructor extension-methods

¿Es posible agregar un método de extensión de constructor? Quiero agregar un constructor List <T> para recibir una cantidad específica de bytes fuera de un búfer parcialmente lleno dado (sin la sobrecarga de copiar solo los bytes relevantes, etc.):

...
public static List<T>(this List<T> l, T[] a, int n)
{
    for (int i = 0; i < n; i++)
       l.Add(a[i]);
}
...

por lo que el uso sería:

List<byte> some_list = new List<byte>(my_byte_array,number_of_bytes);

Ya he agregado un método de extensión AddRange:

public static void AddRange<T>(this List<T> l, T[] a, int n)
{
   for (int i = 0; i < n; i++)
       l.Add(a[i]);
}

Quiero hacerlo también como un constructor. Es posible ? Si es así, ¿cómo?




Sé que esto es un bache, solo quería señalar que puedes heredar la clase List y hacer algo como esto:

class List<T> : System.Collections.Generic.List<T>
    {
        public List(T[] a, int n)
            : base()
        {
                AddRange(a, n);
        }
    }



Related