我有一个通用的界面,允许用户决定要在整个系统中使用哪种变量,但是我也希望有一个易于使用的标准,如果不需要,他们可以代替使用灵活性(在这种情况下为字符串),所以我有两个接口:
public interface Identifiable<IdentifierType> { public IdentifierType Identifier { get; }}
和:
public interface Identifiable : Identifiable<string> { }
我有两个具有相似关系的班级:
public class Registry<IdentifierType,EntryType>
where EntryType : Identifiable<IdentifierType> { }
public class Registry<EntryType>
: Registry<string,EntryType> where EntryType : Identifiable { }
我还有另外两个类,其中使用了这两个类:
public Mapping<IdentifierType>
{
public Mapping(Registry<IdentifierType,Identifiable<IdentifierType>> registry)
}
和:
public Mapping : Mapping<string>
{
public Mapping(Registry<Identifiable> registry) : base(registry)
}
但是在后一类中,编译器抱怨无法从Registry<Identifiable>
转换为Registry<string,Identifiable<string>>
。这是为什么?在我看来,第一种类型只是后者的子类,应该轻松转换,但显然不是。是我做错了什么我想念的东西还是遗漏了继承的东西,或者为什么无法进行转换?