这是C#泛型错误吗?

时间:2014-03-15 12:54:29

标签: c# .net generics interface

此代码产生以下错误:

  

错误1' ConsoleApplication1.FooBar'没有实现接口成员' ConsoleApplication1.IFoo.Bar'。 ' ConsoleApplication1.FooBar.Bar'无法实施&#;; ConsoleApplication1.IFoo.Bar'因为它没有匹配的返回类型' ConsoleApplication1.IBar'。

interface IBar
{

}

interface IFoo
{
    IBar Bar { get; }
}

class FooBar<T> : IFoo where T : IBar
{
    public T Bar
    {
        get { return null; }
    }
}

由于FooBar类中的where关键字,这不应该发生。

我使用Visual Studio 2013和.NET 4.5.1构建了它。

2 个答案:

答案 0 :(得分:15)

这不是错误 - Bar属性的返回类型应完全匹配,即IBar。 C#不支持返回类型协方差。

您可以明确地实现接口:

class FooBar<T> : IFoo where T : IBar
{
    public T Bar
    {
        get { return null; }
    }

    IFoo.Bar { get { return this.Bar; } }
}

答案 1 :(得分:3)

这不是一个错误。由于接口定义不匹配,编译器无法实现它。一种可行的方法是使IFoo也是通用的,如下所示:

interface IBar
{
}

interface IFoo<T>
{
    T Bar { get; }
}

class FooBar<T> : IFoo<T> where T : IBar
{
    public T Bar
    {
        get { return default(T); }
    }
}