Is generic constructor in non-generic class supported?

No, generic constructors aren’t supported in either generic or non-generic classes. Likewise generic events, properties and finalizers aren’t supported.

Just occasionally I agree it would be handy – but the syntax would look pretty awful. For example, suppose you had:

public class Foo<T> {}

public class Foo
{
    public Foo<T>() {}
}

What would

new Foo<string>()

do? Call the generic constructor of the non-generic class, or the normal constructor of the generic class? You’d have to differentiate between them somehow, and it would be messy 🙁

Likewise, consider a generic constructor in a generic class:

public class Foo<TClass>
{
    public Foo<TConstructor>() {}
}

How would you call the constructor? Hopefully we can all agree that:

new Foo<string><int>()

is pretty hideous…

So yes, semantically it would be occasionally useful – but the resulting ugliness counterbalances that, unfortunately.

Leave a Comment