Метод неправильного интерфейса вызванC#

Место общения программистов C#
Anonymous
Метод неправильного интерфейса вызван

Сообщение Anonymous »

Является ли следующая ошибка .net 8 /c#? < /p>

Код: Выделить всё

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);
}
}
Ожидаемый вывод: B, Фактический вывод: A
Он просто вызывает метод создания первого реализованного интерфейса: iCreate , ICReate . Обмен их изменяет результат.

Код: Выделить всё

static string X(ICreate creator) where T : IToString
{
return creator.Create().GetString();
}
и все же, var s = x (createB); сломает его.

Подробнее здесь: https://stackoverflow.com/questions/794 ... hod-called

Вернуться в «C#»