Несоответствие между проверкой возвращаемого типа абстрактного метода и метода интерфейса (CS0738) [дубликат]C#

Место общения программистов C#
Anonymous
Несоответствие между проверкой возвращаемого типа абстрактного метода и метода интерфейса (CS0738) [дубликат]

Сообщение Anonymous »

Предположим, у меня есть код C#. Почему я могу вернуть строку из ClassA.DoThing(), но не могу вернуть строку из ClassB.DoThing()?

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

public abstract class MyBase
{
public abstract object DoThing();
}
public interface MyInterface
{
public object DoThing();
}
public class ClassA : MyBase
{
public override string DoThing() => ""; // ✅ Returning a string is allowed here.
}
public class ClassB : MyInterface
{
public string DoThing() => ""; // ❌ But I cannot return a string here (CS0738). Why?
}
Почему возврат строки разрешен для переопределения метода, но не для реализации интерфейса? Я предполагаю, что он должен следовать тем же правилам.
Попытка скомпилировать ClassB.DoThing() приводит к этой ошибке:

CS0738: «ClassB» не реализует член интерфейса «MyInterface.DoThing()». 'ClassB.DoThing()' не может реализовать 'MyInterface.DoThing()', поскольку он не имеет соответствующего возвращаемого типа 'object'.

Изображение

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