我正在深入研究仿制药,现在我需要帮助。我在下面的'Derived'类中遇到编译错误,如主题标题所示。我看到很多其他类似的帖子,但我没有看到这种关系。有人能告诉我如何解决这个问题吗?
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)
{
}
}
}
答案 0 :(得分:421)
我无法复制,但我怀疑在你的实际代码中有一个约束T : class
- 你需要传播它以使编译器满意,例如(如果没有一个重复的例子,很难说肯定):
public class Derived<SomeModel> : Base<SomeModel> where SomeModel : class, IModel
^^^^^
see this bit
答案 1 :(得分:42)
如果您将T
限制为class
答案 2 :(得分:7)
如果对泛型类或方法设置约束,则使用它的每个其他泛型类或方法都需要“至少”具有这些约束。