有这些课程:
public interface IDbContextFactory
{
DbContext GetContext();
}
public class Repo<T> : IRepo<T> where T : Entity, new()
{
protected readonly DbContext c;
}
public Repo(IDbContextFactory f)
{
c = f.GetContext();
}
关键字new()
(在class Repo<T>
中)有什么作用?
答案 0 :(得分:11)
这意味着类型T
必须公开一个公共的,默认的(即无参数的)构造函数。也就是说,您将能够使用T
构建new T()
的实例。它也可以暴露其他构造函数,但是这个通用约束使得默认值是必需的。
答案 1 :(得分:3)
这意味着,实体应该有一个无参数的公共构造函数。
请参阅this.
答案 2 :(得分:1)
在通用定义中使用where
关键字时,会对通用参数应用类型约束。 new()
约束声明在这种情况下类型T
必须具有默认构造函数。 http://msdn.microsoft.com/en-us/library/sd2w2ew5.aspx
在阅读了clarification disguised as an answer之后,我想我会尝试通过澄清一些事情来提供帮助。
您的原始问题中的代码定义了一个由非实体构造函数使用的接口。在这两个定义之间你已经定义了一个似乎没什么用处的泛型类。
您的问题与泛型类有关,而其他两个定义与问题和答案无关。