此代码产生以下错误:
错误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构建了它。
答案 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); }
}
}