问题
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
来源:https://stackoverflow.com/questions/13806660/what-does-the-new-constraint-do-on-a-class-definition