Cambiar el modificador de params en un método de anulación

Soy consciente de que unparams El modificador (que convierte un parámetro del tipo de matriz en una llamada "matriz de parámetros") no forma parte específica de la firma del método. Ahora considera este ejemplo:

class Giraffid
{
    public virtual void Eat(int[] leaves)
    {
        Console.WriteLine("G");
    }
}
class Okapi : Giraffid
{
    public override void Eat(params int[] leaves)
    {
        Console.WriteLine("O");
    }
}

Esto se compila sin advertencias. Entonces diciendo:

var okapi = new Okapi();
okapi.Eat(2, 4, 6);  // will not compile! 

da un error (No overload for method 'Eat' takes 3 arguments).

Ahora, sé que el compilador traduceparams modificador en una aplicación de laSystem.ParamArrayAttribute en el parámetro en cuestión. En general, no hay problema en aplicar una colección de atributos a un parámetro de un método virtual, y luego decorar el parámetro "correspondiente" en un método de reemplazo en una clase derivada con un conjunto diferente de atributos.

Sin embargo, el compilador elige ignorar miparams palabra clave en silencio. Por el contrario, si uno lo hace al revés, y aplicaparams al parámetro en la clase baseGiraffid, y luego omite la palabra clave en la anulación enOkapi, el compilador elige decorarambos métodos con elSystem.ParamArrayAttribute. Verifiqué estas cosas con IL DASM, por supuesto.

Mi pregunta:

¿Está documentado este comportamiento? He buscado exhaustivamente en la Especificación de lenguaje C # sin encontrar ninguna mención de esto.

Puedo decir que al menos el entorno de desarrollo de Visual Studio está confundido acerca de esto. Al escribir el2, 4, 6 en el llamado al método anterior, elintellisense me muestravoid Okapi.Eat(params int[] leaves) en una punta.

Para comparar, también intenté implementar un método de interfaz y cambiar la presencia / ausencia deparams en la interfaz y la clase de implementación, e intenté definir un tipo de delegado y cambiarparams o no en la definición del tipo de delegado o en el método cuyo grupo de método asigné a una variable de mi tipo de delegado. En estos casos fue perfectamente posible cambiar.params-ness

Respuestas a la pregunta(2)

Su respuesta a la pregunta