我有以下抽象类:
=~
和2个子类:
public abstract class PinkBoxMasksDataAbstract
{
public string PinkBoxText { get; set; }
}
然后我有另一个类,它有PinkBoxMasksDataAbstract类作为参数:
public class PinkBoxMasksDataNoOverlay : PinkBoxMasksDataAbstract
{
}
public class PinkBoxMasksDataOverlay : PinkBoxMasksDataAbstract
{
public int PinkBoxLeft { get; set; }
public int PinkBoxBoxTop { get; set; }
public int PinkBoxHeight { get; set; }
public int PinkBoxWidth { get; set; }
}
现在我想以这种方式创建这个类:
public class ZonalMatchResult<T> where T : PinkBoxMasksDataAbstract
{
public decimal Confidence { get; set; }
public int GreenBoxLeft { get; set; }
public int GreenBoxTop { get; set; }
public int GreenBoxHeight { get; set; }
public int GreenBoxWidth { get; set; }
public List<T> PinkBoxMasksData { get; set; }
}
public class ZonalResult<T> where T : PinkBoxMasksDataAbstract
{
public int ExitCode { get; set; }
public string ErrorMessage { get; set; }
public int NumberOfGreenBoxMatches { get; set; }
public int NumberOfPinkBoxExtractFrames { get; set; }
public int ProcessingTime { get; set; }
public bool HasOverlay { get; set; }
public List<ZonalMatchResult<T>> MatchResults { get; set; }
}
但是我收到了错误:
无法隐式转换类型
ZonalResult<PinkBoxMasksDataAbstract> zonalResult; if (isOverlayRequired) zonalResult = new ZonalResult<PinkBoxMasksDataOverlay>(); else zonalResult = new ZonalResult<PinkBoxMasksDataNoOverlay>();
来'Domain.ZonalResult<Domain.PinkBoxMasksDataOverlay>'
如果PinkBoxMasksDataOverlay是PinkBoxMasksDataAbstract的子类,为什么会发生这种情况?怎么解决?
答案 0 :(得分:1)
ZonalMatchResult
不会从PinkBoxMasksDataAbstract
继承,只会从其类型参数继承。这就是原因,你得到这个错误。
您可以通过这种方式特定地设置数据(当然,在这种情况下它可能不是抽象的):
ZonalMatchResult<PinkBoxMasksDataAbstract> r = new ZonalMatchResult<PinkBoxMasksDataAbstract>;
if (isOverlayRequired)
r.PinkBoxMasksData = new PinkBoxMasksDataOverlay();
else
r.PinkBoxMasksData = new PinkBoxMasksDataNoOverlay();
但是,为什么不简单的PinkBoxMasksData
类具有Overlay
属性。如果此属性为null,则表示没有叠加。
public class Overlay
{
public int PinkBoxLeft { get; set; }
public int PinkBoxBoxTop { get; set; }
public int PinkBoxHeight { get; set; }
public int PinkBoxWidth { get; set; }
}
public class Mask
{
public string PinkBoxText { get; set; }
public Overlay Overlay { get; set; }
}
var mask = new Mask();
if (isOverlayRequired)
{
mask.Overlay = new Overlay();
}
对于Interfaces,还有covariance选项,但这对于类来说是不可能的。所以不,我不认为有办法。