Microsoft introduced support for named and optional parameters in C# 4.0. While a named parameter is used to specify an argument based on the name of the argument and not the position, an optional ...
Not only are generics/templates better for type safety, they are much faster than casting back and fourth. Or as they call it in .NET land boxing and unboxing.