I have the following abstract class:
public abstract class PinkBoxMasksDataAbstract
{
public string PinkBoxText { get; set; }
}
and 2 subclasses:
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; }
}
then I have another class, which has PinkBoxMasksDataAbstract class as parameter:
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; }
}
now I want to create this class this way:
ZonalResult<PinkBoxMasksDataAbstract> zonalResult;
if (isOverlayRequired)
zonalResult = new ZonalResult<PinkBoxMasksDataOverlay>();
else
zonalResult = new ZonalResult<PinkBoxMasksDataNoOverlay>();
but I get an error:
Cannot implicitly convert type
'Domain.ZonalResult<Domain.PinkBoxMasksDataOverlay>'
to'Domain.ZonalResult<Domain.PinkBoxMasksDataAbstract>'
Why it happens if PinkBoxMasksDataOverlay is subclass of PinkBoxMasksDataAbstract? How to fix?