方法中的new()

时间:2012-06-25 16:00:07

标签: c# generics

有这些课程:

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>中)有什么作用?

3 个答案:

答案 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之后,我想我会尝试通过澄清一些事情来提供帮助。

您的原始问题中的代码定义了一个由非实体构造函数使用的接口。在这两个定义之间你已经定义了一个似乎没什么用处的泛型类。

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