What does the new() constraint do on a class defin

2019-02-23 20:53发布

问题:

I saw this code example and was wondering what the purpose of the new() constraint was:

public class Client<T> : IClient where T : IClientFactory, new()
{
    public Client(int UserID){ }
}

回答1:

That's called a "'new' constraint". Here's the documentation on it.

The new constraint specifies that any type argument in a generic class declaration must have a public parameterless constructor. To use the new constraint, the type cannot be abstract.

(Emphasis mine)

Basically, you need it whenever you're creating a new T somewhere in the class, to ensure that you're only able to pass in things which the compiler can create a new instance of.



回答2:

Client is a collection of T objects, and those T objects must implement the IClientFactory interface and have a public parameterless constructor.



回答3:

new() means

The type argument must have a public parameterless constructor. When used together with other constraints, the new() constraint must be specified last.

Ref Generic Constraints on MSDN