You can take a look at the C # language specification ยง7.5.3 (overload)
In short, I think the override keyword is used to override implementations , not parameters. You cannot redefine args, args must be the same from abstraction (they think about applying the liskov signature principle here).
Params is fully syntactic sugar, it is strictly equivalent to a simple array. In some cases, this is easier to find, avoiding array casts; the compiler does the work for you during the method call.
Note that in C # 6 the options will be compatible with IEnumerable.
source share