Compilerwaarschuwing (niveau 1) CS1956

Lid 'name' implementeert interfacelid 'name' in het type 'type'. Er zijn meerdere overeenkomsten voor het interfacelid tijdens runtime. Het is afhankelijk van de implementatie welke methode wordt aangeroepen.

Deze waarschuwing kan worden gegenereerd wanneer twee interfacemethoden alleen worden onderscheiden door of een bepaalde parameter is gemarkeerd met ref of met out. U kunt de code het beste wijzigen om deze waarschuwing te voorkomen, omdat deze niet duidelijk of gegarandeerd is welke methode tijdens runtime wordt aangeroepen.

Hoewel C# onderscheid maakt tussen out en ref, ziet de CLR ze als hetzelfde. Bij het bepalen welke methode de interface implementeert, kiest de CLR er gewoon een.

Deze waarschuwing voorkomen

  1. Geef de compiler een manier om onderscheid te maken tussen de methoden. U kunt ze bijvoorbeeld verschillende namen geven of een extra parameter opgeven voor een van deze namen.

Opmerking

Met de volgende code wordt CS1956 gegenereerd, omdat de twee Test methoden Base alleen verschillen door deout ref/wijzigingsfunctie voor de eerste parameter.

// 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);  
    }  
}