Ho una domanda che non è davvero un problema, ma qualcosa che mi ha reso un po 'curioso.Domanda su chiamate ambigue in C#
Ho una classe con due metodi. Uno è un metodo statico e l'altro è un metodo di istanza. I metodi hanno lo stesso nome.
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.
}
}
Quando si tenta di costruire il mio progetto ho un errore che dice:
La chiamata è ambigua tra le seguenti metodi o proprietà: 'MyApp.BlockHeader.Peek (System.IO. BinaryReader)' e 'MyApp.BlockHeader.Peek (System.IO.BinaryReader)'
so che le firme dei metodi sono vir lo stesso, ma non riesco a vedere come potrei chiamare un metodo statico direttamente da un membro di istanza.
Suppongo che ci sia una buona ragione per questo, ma qualcuno sa qual è questa ragione?
Penso che ciò sia dovuto al fatto che J # e altri linguaggi consentono di chiamare metodi statici dai membri dell'istanza. Il CLR deve far rispettare il minimo comune denominatore. –
Non sapevo che J # permettesse questo. Interessante. – Patrik
Trovo questo bizzarro pure. La specifica è estremamente chiara che questo comportamento è _correct_. Vedere la sezione 7.5.5.1, il bit che va: "Se il metodo migliore è un metodo statico, il gruppo metodo deve essere il risultato di un nome semplice o di un accesso membro attraverso un tipo ..." Si noti come quel bit accade dopo il bit dove capire il metodo "migliore". "Bestness" è chiaramente calcolato PRIMA, prima di verificare la staticità. Quindi la bontà non tiene conto della staticità e nel tuo caso non è possibile determinare il metodo migliore. Pertanto, errore di ambiguità. –