Falsche Schnittstellenmethode namens [Duplikat]
Posted: 11 Mar 2025, 22:53
ist der folgende A.NET 8 /C# -Fehler? < /p>
Erwartete Ausgabe: B, tatsächliche Ausgabe: A
Aufrufe nur die Methode erstellen der ersten implementierten Schnittstelle: ICreate , icreate . Wenn Sie sie austauschen, wird das Ergebnis geändert.
Und trotzdem wird Var s = x (createB); es brechen. Es wäre das gleiche Problem, wenn die Instanz als c createB = new C (); bezeichnet würde. Die Referenz ist jedoch explizit auf iCreate , aber sie ruft icreate .
Code: Select all
internal class Program
{
interface IGetString
{
string GetString();
}
class A : IGetString
{
public string GetString() => "A";
}
class B : IGetString
{
public string GetString() => "B";
}
interface ICreate
{
T Create();
}
class C : ICreate, ICreate
{
A ICreate.Create()
{
return new A();
}
B ICreate.Create()
{
return new B();
}
}
static string X(ICreate creator)
{
return creator.Create().GetString();
}
static void Main()
{
ICreate createB = new C();
var s = X(createB);
Console.WriteLine("Result: " + s);
}
}
Aufrufe nur die Methode erstellen der ersten implementierten Schnittstelle: ICreate , icreate . Wenn Sie sie austauschen, wird das Ergebnis geändert.
Code: Select all
static string X(ICreate creator) where T : IToString
{
return creator.Create().GetString();
}