2014-09-01 61 views
-3

以下是C#編譯器不允許的。它說Cool的ICool的Jello方法的實現不會返回一個IObject。但Object是一個IObject。爲什麼不支持?爲什麼在實現接口時沒有隱式轉換返回類型?

interface ICool 
{ 
    IObject Jello(); 
} 

interface IObject 
{ 

} 

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

class Object : IObject 
{ 

} 
+1

作品就好在這裏。不要將它命名爲「對象」,因爲該名稱已被採用,可能是問題的原因:您使用了錯誤的「對象」類。 – 2014-09-01 14:00:26

+0

我很抱歉。我發佈了一個編輯版本。這是正確的版本。酷返回對象。 – Alexandre 2014-09-01 14:01:00

+0

剛剛發佈了無法使用的代碼! – Alexandre 2014-09-01 14:04:08

回答

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

如果您認爲這是其他地方不存在的信息,則應將其添加到帖子中,這是重複的,以將有價值的答案組合在一起。 – 2014-09-01 14:21:49

相關問題