2014-09-01 3 views
-3

Компилятор C# не допускает следующее. В нем говорится, что реализация Cool в методе Jello ICool не возвращает IObject. Но Object - это IObject. Почему это не поддерживается?Почему при реализации интерфейса не существует неявного литья возвращаемых типов?

interface ICool 
{ 
    IObject Jello(); 
} 

interface IObject 
{ 

} 

class Cool : ICool 
{ 
    public Object Jello() { return new Object(); } 
} 

class Object : IObject 
{ 

} 
+1

прекрасно работает здесь. Не называйте его «Object», потому что это имя уже принято и, вероятно, является причиной проблемы: вы используете неправильный класс «Object». –

+0

Прошу прощения. Я опубликовал отредактированную версию. Это правильная версия. Класс возвращает объект. – Alexandre

+0

Только что опубликовал код, который не работает! – Alexandre

ответ

0

Ниже приводится обходной путь для C# не поддерживает тип возвращаемого значения ковариации (см "Interface not implemented" when Returning Derived Type):

using System.Text; 
using System.Threading.Tasks; 

namespace CsharpFun 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Object obj = (Object) new Cool().Jello(); 
     } 
    } 

    interface ICool<T> where T : IObject 
    { 
     T Jello(); 
    } 

    interface IObject 
    { 

    } 

    class Cool : ICool<Object> 
    { 
     public Object Jello() { return new Object(); } 
    } 

    class Object : IObject 
    { 

    } 
} 
+0

Если вы считаете, что это информация, которой нет нигде, вы должны добавить ее в сообщение, что это дубликат, чтобы сохранить ценные ответы, сгруппированные вместе. –

Смежные вопросы