C# requires the first param to match the containing type but the rest can be anything so we'd better map them to their interfaces, if any.