说我有这两个接口
public interface A
{
}
public interface B
{
A a {get;}
}
这两种具体类型
public class ConcreteA : A
{
}
public class ConcreteB : B
{
public ConcreteA a {get;}
}
这不能编译,因为接口B期望接口A而不是ConcreteA。
目前我正在自动生成带接口的代码,我遇到了这个senario。而不是修改我的所有模型来实现和显式接口定义,其中将返回我的具体类的接口版本,我想使用某种版本的协方差来做到这一点,但我不确定是否有办法做这或如果这是C#的限制。
是否存在允许我这样做的逆向变换的接口方式?
1.1如果没有明确的理由说明为什么没有实施,或者是否存在一个问题,如果这是实施的话?
答案 0 :(得分:2)
你必须使它成为通用的
public interface B<T> where T : A
{
T a {get; set;}
}
public class ConcreteA : A
{
}
public class ConcreteB : B<ConcreateA>
{
public ConcreteA a {get; set;}
}
那是因为
B b = new ConcreteB();
b.a = AnythingThatImplementsA;
无法强迫您仅将其设置为ConcreteA
的其他内容。