可以实现这样的东西吗?我在类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>(); }
}
}
知道该怎么做吗?
答案 0 :(得分:5)
要实现这一目标,您需要引入一个界面(MyInterface
)来使用covariance:
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>(); }
}
}
答案 1 :(得分: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>(); }
}
}