4

有这些课程:

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()(in class Repo<T>) 有什么作用?

4

3 回答 3

11

这意味着该类型T必须公开一个公共的、默认的(即无参数的)构造函数。也就是说,您将能够构造Twith的实例new T()。它也可以公开其他构造函数,但是这种通用约束使默认约束成为强制性的。

于 2012-06-25T16:01:57.837 回答
3

这意味着,实体应该有一个无参数的公共构造函数。

看到这个。

于 2012-06-25T16:02:19.540 回答
1

当您where在泛型定义上使用关键字时,您将类型约束应用于泛型参数。new()约束声明该类型,在T这种情况下,必须有一个默认构造函数。http://msdn.microsoft.com/en-us/library/sd2w2ew5.aspx


在阅读了伪装成答案的说明后,我想我会尝试通过澄清几件事来提供帮助。

您原始问题中的代码定义了一个似乎由无实体构造函数使用的接口。在这两个定义之间,您定义了一个似乎没有多大作用的泛型类。

您的问题与通用类有关,其他两个定义与问题和答案无关。

于 2012-06-25T16:09:01.327 回答