Tengo una interfaz ISnack
que, cuando la implementa una clase, debe tener un constructor sin parámetros predeterminado. Básicamente esto:Existe una forma de aplicar el constructor sin parámetros sin la restricción genérica
public interface ISnack<T> where T : new()
{
}
utilizo <T> where T : new()
sólo para hacer cumplir el constructor sin parámetros.
me permitiría implementar la interfaz de esta manera:
public class Cutlet : ISnack<Cutlet>
{
}
Esto funciona y simplemente asegura Cutlet
clase tiene un constructor sin parámetros.
Ahora tienen una clase base abstracta Kitchen
:
public abstract class Kitchen<T> where T : ISnack
{
}
El requisito es que debe tener restricción Kitchen
donde T
debería haber una ISnack
. Pero esto no funcionará porque no existe ISnack
, pero solo ISnack<T>
.
Si tratara este
public abstract class Kitchen<T> where T : ISnack<T>
{
}
no compile ('T' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'T' in the generic type or method 'ISnack<T>'
) y además no tendría sentido en mi contexto.
Si pudiera forzar ISnack
s tener un constructor sin parámetros sin restringir por un parámetro T
tipo, entonces T
en Kitchen<T>
podría fácilmente ser una ISnack
. ¿Cómo hacerlo?
Marc, ¡De acuerdo! has resumido todo lo que he intentado ... Hmmm runtime es la opción que tengo Supongo – nawfal
@nawfal Si está bien, puedes agregar un segundo argumento genérico a la cocina y esto debería funcionar: 'abstact class Kitchen donde T: ISnack
donde S: new() ' –@FelixK. ¿puedes hacer que sea otra respuesta? – nawfal