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
- 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);
}
}
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für