Compilerwarnung (Stufe 1) CS1956

Der Member „name“ implementiert den Schnittstellenmember im Typ „type“. Es gibt mehrere Übereinstimmungen für die Schnittstellenmember zur Laufzeit. Welche Methode aufgerufen wird, ist implementierungsabhängig festzulegen, .

Diese Warnung kann generiert werden, wenn sich zwei Schnittstellenmethoden lediglich dadurch unterscheiden, ob ein bestimmter Parameter mit ref oder out gekennzeichnet ist. Es empfiehlt sich, Ihren Code zu ändern, um diese Warnung zu vermeiden, da es nicht offensichtlich oder garantiert ist, welche Methode zur Laufzeit aufgerufen wird.

Obwohl C# zwischen out und ref unterscheidet, sieht die CLR sie als identisch an. Bei der Entscheidung, welche Methode die Schnittstelle implementiert, wählt die CLR einfach eine.

So vermeiden Sie diese Warnung

  1. Geben Sie dem Compiler eine Möglichkeit, die Methoden zu unterscheiden. Beispielsweise können Sie ihnen unterschiedliche Namen zuweisen oder einen zusätzlichen Parameter für eine der Methoden angeben.

Beispiel

Im folgende Code wird CS1956 generiert, da sich die zwei Test-Methoden in Base nur durch den Modifizierer ref/out auf dem ersten Parameter unterscheiden.

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