Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Aggiornamento: novembre 2007
Messaggio di errore
Il membro 'name' implementa il membro di interfaccia 'name' nel tipo 'type'. Sono presenti più corrispondenze del membro di interfaccia in fase di esecuzione. Il metodo richiamato dipende dall'implementazione.
Member 'name' implements interface member 'name' in type 'type'. There are multiple matches for the interface member at run-time. It is implementation dependent which method will be called.
Questo avviso viene generato quando due metodi di interfaccia si differenziano solo in base al fatto che un determinato parametro sia ref o out. È consigliabile modificare il codice per evitare la visualizzazione di questo avviso poiché non è ovvio o garantito quale metodo verrà effettivamente chiamato in fase di esecuzione.
Sebbene in C# venga fatta distinzione tra out e ref, in CLR sono considerati uguali. Quando si decide il metodo che implementa l'interfaccia, in CLR ne viene semplicemente scelto uno.
Per evitare la visualizzazione di questo avviso
- Consentire al compilatore di differenziare i metodi assegnando, ad esempio, nomi diversi o fornendo un parametro aggiuntivo.
Esempio
Nel codice seguente viene generato l'errore CS1956 poiché i due metodi Test in Base differiscono solo per il modificatore ref/out nel primo parametro:
// cs1956.cs
class Base<T, S>
{
// This is the method that should be called.
public virtual int Test(out T x) // CS1956
{
x = default(T);
return 0;
}
// This is the "last" method and is the one that ends up being called
public virtual int Test(ref S x)
{
return 1;
}
}
interface IFace
{
int Test(out int x);
}
class Derived : Base<int, int>, IFace
{
static int Main()
{
IFace x = new Derived();
int y;
return x.Test(out y);
}
}