C#泛型和接口

use*_*543 2 c# generics inheritance interface

有可能实现这样的事情吗?我在类SomeClass的声明中遇到此代码的问题.

我收到的例外情况是:

'WindowsFormsApplication1.SomeClass'没有实现接口成员'WindowsFormsApplication1.IB.SomeGetter'.'WindowsFormsApplication1.SomeClass.SomeGetter'无法实现'WindowsFormsApplication1.IB.SomeGetter',因为它没有匹配的返回类型'WindowsFormsApplication1.MyClass'.

我的代码:

public interface IA
{ }

public interface IB
{
    MyClass<IA> SomeGetter { get; }
}

public class A : IA
{ }

public class MyClass<T>
    where T : IA
{ }

public class SomeClass : IB
{
    public MyClass<A> SomeGetter
    {
        get { return new MyClass<A>(); }
    }
}
Run Code Online (Sandbox Code Playgroud)

知道怎么做吗?

Ric*_*lly 5

要实现这一点,您需要引入一个接口(MyInterface)来使用协方差:

public interface IA
{ }

public interface IB
{
    MyInterface<IA> SomeGetter { get; }
}

public class A : IA
{ }

public interface MyInterface<out T>
    where T : IA
{ }

public class MyClass<T> : MyInterface<T> where T : IA
{ }

public class SomeClass : IB
{
    public MyInterface<IA> SomeGetter
    {
        get { return new MyClass<A>(); }
    }
}
Run Code Online (Sandbox Code Playgroud)