I’m writing a Generic class as follows.
public class Foo<T> :
where T : Bar, new()
{
public void MethodInFoo()
{
T _t = new T();
}
}
As you can see the object _t of type T is instantiated at runtime. To support instantiation of generic type T, the language forces me to put new() in the class signature. I’d agree to this if Bar is an abstract class but why does it need to be so if Bar standard non-abstract class with public parameterless constructor.
The compiler prompts with the following message if new() is not found.
Cannot create an instance of the variable type ‘T’ because it does not have the new() constraint
Because there isn’t normally an assumption that the template parameter needs to be [non-abstract and] constructible [via a public parameterless constructor] in order for a Type to match the template parameter definition.
Until you add a
:new()constraint on the template:TTwith abstract types or types without a public parameterless constructorThe
:Barbit is orthogonal and means:BarTs toBaror types derived fromBarwithin the bodyBaron aT