Ich habe folgende abstrakte Klasse:Vererbung und Generika C#
public abstract class PinkBoxMasksDataAbstract
{
public string PinkBoxText { get; set; }
}
und 2 Unterklassen:
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; }
}
dann habe ich eine andere Klasse, die PinkBoxMasksDataAbstract Klasse als Parameter hat:
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; }
}
jetzt möchte ich diese Klasse auf diese Weise erstellen:
ZonalResult<PinkBoxMasksDataAbstract> zonalResult;
if (isOverlayRequired)
zonalResult = new ZonalResult<PinkBoxMasksDataOverlay>();
else
zonalResult = new ZonalResult<PinkBoxMasksDataNoOverlay>();
aber ich erhalte eine Fehlermeldung:
Cannot implicitly convert type
'Domain.ZonalResult<Domain.PinkBoxMasksDataOverlay>'
to'Domain.ZonalResult<Domain.PinkBoxMasksDataAbstract>'
Warum es passiert, wenn PinkBoxMasksDataOverlay Unterklasse von PinkBoxMasksDataAbstract ist? Wie repariert man?
Erstellen Sie eine 'ZonalMatchResultBase' Klasse nicht generisch und erben' ZonalMatchResult 'von dieser, dann können Sie den Basistyp verwenden, um eine generische Instanz zu speichern. –
Gusman
'ZonalMatchResult' und 'ZonalMatchResult ' haben keine gemeinsame Basisklasse außer 'object'. Die Vererbungsbeziehung der Typparameter hat hier keine Bedeutung; Wenn sie anders sind, sind sie anders. –
@Gusman, ich habe ein tiefes Kind Klassen. Wirklich ZonalMatchResult ist nur Kette von verschachtelten Klassen –