为什么在实现接口时没有返回类型的隐式强制转换

本文关键字:转换 返回类型 实现 接口 为什么 | 更新日期: 2023-09-27 18:20:10

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
{
}

为什么在实现接口时没有返回类型的隐式强制转换

以下是C#不支持返回类型协方差的解决方法(请参阅返回派生类型时的"接口未实现"):

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
    {
    }
}