Tengo una pregunta que no es realmente un problema, pero algo que me hizo un poco de curiosidad.Pregunta sobre llamadas ambiguas en C#
Tengo una clase con dos métodos en ella. Uno es un método estático y el otro es un método de instancia. Los métodos tienen el mismo nombre.
public class BlockHeader
{
public static BlockHeader Peek(BinaryReader reader)
{
// Create a block header and peek at it.
BlockHeader blockHeader = new BlockHeader();
blockHeader.Peek(reader);
return blockHeader;
}
public virtual void Peek(BinaryReader reader)
{
// Do magic.
}
}
Cuando intento para construir mi proyecto me da un error diciendo:
La llamada es ambigua entre las siguientes métodos o propiedades: 'MyApp.BlockHeader.Peek (System.IO. BinaryReader)' y 'MyApp.BlockHeader.Peek (System.IO.BinaryReader)'
sé que las firmas de los métodos son vir Tually lo mismo, pero no veo cómo podría llamar a un método estático directamente desde un miembro de instancia.
Supongo que hay una muy buena razón para esto, pero ¿alguien sabe cuál es esa razón?
Creo que esto se debe a que J # y otros lenguajes le permiten llamar a métodos estáticos de los miembros de la instancia. El CLR tiene que hacer cumplir el denominador común más bajo. –
No sabía que J # lo permitía. Interesante. – Patrik
Esto me parece extraño también. La especificación es extremadamente clara de que este comportamiento es _correcto_. Ver la Sección 7.5.5.1, el bit que dice: "Si el mejor método es un método estático, el grupo de métodos debe ser el resultado de un nombre simple o un acceso de miembro a través de un tipo ..." Observe cómo sucede ese bit DESPUÉS del bit donde descubrir el "mejor" método. La "bondad" se calcula claramente PRIMERO, antes de verificar la estática. Por lo tanto, la bondad no tiene en cuenta la estática, y en su caso, no se puede determinar el mejor método. Por lo tanto, error de ambigüedad –