Estoy profundizando en los genéricos y ahora tengo una situación en la que necesito ayuda. Recibo un error de compilación en la clase 'Derivada' a continuación, como se muestra en el título del tema. Veo muchas otras publicaciones similares a esta, pero no veo la relación. ¿Alguien puede decirme cómo resolver esto?
using System;
using System.Collections.Generic;
namespace Example
{
public class ViewContext
{
ViewContext() { }
}
public interface IModel
{
}
public interface IView<T> where T : IModel
{
ViewContext ViewContext { get; set; }
}
public class SomeModel : IModel
{
public SomeModel() { }
public int ID { get; set; }
}
public class Base<T> where T : IModel
{
public Base(IView<T> view)
{
}
}
public class Derived<SomeModel> : Base<SomeModel> where SomeModel : IModel
{
public Derived(IView<SomeModel> view)
: base(view)
{
SomeModel m = (SomeModel)Activator.CreateInstance(typeof(SomeModel));
Service<SomeModel> s = new Service<SomeModel>();
s.Work(m);
}
}
public class Service<SomeModel> where SomeModel : IModel
{
public Service()
{
}
public void Work(SomeModel m)
{
}
}
}
Respuestas:
No puedo reprobar, pero sospecho que en su código real hay una restricción en algún lugar que
T : class
necesita propagar para hacer feliz al compilador, por ejemplo (difícil de decir con certeza sin un ejemplo de repro):fuente
Obtiene este error si se ha limitado
T
a ser unclass
fuente
Si coloca restricciones en una clase o método genérico, cualquier otra clase o método genérico que lo esté utilizando debe tener "al menos" esas restricciones.
fuente