I know you can write:
class GenericClass<T> where T : new()
{
}
to enforce that T
has an empty constructor.
My Qs are :
can you enforce that
T
has a constructor with a specific type of parameter? Like:class SingletonFactoryWithEmptyConstructor<T> where T : new(int)
can you enforce that
T
has a static function (let's say,void F()
) so that you can use this function inside the generic class? Like :class GenericClass<T> where T : void F() { void G () { T.F(); } }
I know you can specify that
T
implements an interface but I don't want that. I want to specify thatT
has a static function.
No, there's nothing like this in C#.
I've previously suggested that "static interfaces" could express this reasonably neatly. They'd only be useful for generic type constraints (I suspect, anyway) but then you could express:
The last of these points is particularly interesting in my view, allowing things like a generic "Average" method over numeric types with suitable addition and division operators.
I believe some folks at MS have thought about something similar, but I haven't heard anything to suggest they're actively working on it.