我有两个接口,
public interface IDocument<SegType> where SegType : ISegment
和
public interface ISegment
基本上,我想强制实现IDocument
的每个类都由一种类型组成ISegment
,并且使用这些类的人永远不需要知道ISegment
他们的类在内部使用哪种类型。
然后我创建了一个实现的类IDocument<SegType> where SegType : ISegment
:
public class MyDocument : IDocument<MySegment>
和相应的MySegment
:
public class FffSegment : ISegment
MyDocument
当我指定为类型时,所有这些都会按照我期望的那样编译和工作。为什么我不能隐式地将实例强制MyDocument
转换为类型IDocument<Isegment>
?当我尝试这条线时:
IDocument<ISegment> doc = new MyDocument();
我得到错误
Cannot implicitly convert type 'MyDocument' to 'IDocument<ISegment>'. An explicit conversion exists (are you missing a cast?)
但是当我施放它时,它只是返回为空。如果我将其更改为:
IDocument<MySegment> doc = new MyDocument();
它有效,就像我将类定义更改为
public class MyDocument : IDocument<ISegment>
为什么我不能为 IDocument 的实现强制实现 ISegment 的特定类型?我想将此代码重新用于不同类型的代码,IDocument
也许ISegment
有一天某些实现IDocument
将允许多种类型,ISegment
但MyDocument
应限制这种行为。我如何才能强制执行这些要求,但仍然编写足够通用的代码以供将来重用?