Foo<?>) at design time. In C# the type parameters are reified and take some getting used to.IFoo without type parameters and then another one with type parameters as IFoo<T> : IFoo. Now I can declare method parameters of type IFoo (or IFoo[] or similar) when I don't need to call methods which require the type parameters. I suspect that this is probably more of an anti pattern and I would like to learn how to better design APIs in C#.