2

有可能实现这样的事情吗?我在类 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>(); }
    }
}

知道怎么做吗?

4

2 回答 2

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>(); }
    }
}
于 2012-07-03T11:24:33.897 回答
0

你可能想为 MyClass 引入一个接口:

public interface IMyClass<out T> where T : IA
{

}

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

注意界面中的“out”关键字。然后你可以写

public class SomeClass : IB
{
    public IMyClass<A> SomeGetter
    {
        get { return new MyClass<A>(); }
    }
}
于 2012-07-03T11:32:16.887 回答