Ich beschäftige mich tiefer mit Generika und habe jetzt eine Situation, in der ich Hilfe brauche. Ich erhalte einen Kompilierungsfehler für die unten stehende Klasse 'Abgeleitet', wie im Betreff angegeben. Ich sehe viele ähnliche Beiträge, aber ich sehe die Beziehung nicht. Kann mir jemand sagen, wie ich das lösen kann?
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)
{
}
}
}
Antworten:
Ich kann nicht repro, aber ich vermute, dass es in Ihrem eigentlichen Code irgendwo eine Einschränkung gibt, die
T : class
- Sie müssen diese weitergeben, um den Compiler zum Beispiel glücklich zu machen (ohne ein Repro-Beispiel sicher schwer zu sagen):quelle
Sie erhalten diesen Fehler, wenn Sie sich darauf beschränkt haben, a
T
zu seinclass
quelle
Wenn Sie einer generischen Klasse oder Methode Einschränkungen auferlegen, muss jede andere generische Klasse oder Methode, die sie verwendet, "mindestens" diese Einschränkungen haben.
quelle