New coder here I have the following base interfaces:
public interface ITDXInput
{
}
Which fathers this one:
public interface ITDXInput <TSCContext, TContext, TWaferContainer> : ITDXInput where TContext : IToolContext where TSCContext: ISCContext where TWaferContainer : IWaferContainer
{
TSCContext SCContext { get; set; }
TContext ToolContext { get; set; }
TWaferContainer WaferContainer { get; set; }
}
This interface then fathers this one:
public class CIMTDXInput : ITDXInput<CIMSCContext, CIMToolContext, CIMWaferContainer>
{
public CIMWaferContainer WaferContainer { get; set; }
public CIMSCContext SCContext { get; set; }
public CIMToolContext ToolContext { get; set; }
}
It's members are like so:
public class CIMSCContext : ISCContext
{
public string PROCESSING_END_TIME { get; set; }
public string PRODUCT_NAME { get; set; }
public string QUANTITY_IN { get; set; }
public string LOT_OWNER { get; set; }
public string FW_VERSION { get; set; }
}
public class CIMToolContext : IToolContext
{
public string LOT { get; set; }
public string TDX_MULTI_FILES { get; set; }
public string PROCESSING_START_TIME { get; set; }
public string WITHIN_UNIT_AXIS_DIRECTION { get; set; }
}
public class CIMWaferContainer : IWaferContainer
{
public CIMWaferContext WaferContext = new CIMWaferContext();
public List<CIMWaferImage> ImageList = new List<CIMWaferImage>();
public List<CIMWaferDieResults> WaferResultList = new List<CIMWaferDieResults>();
}
But when I try to call the class like so:
public class TDXParser
{
public ITDXInput<ISCContext, IToolContext , IWaferContainer> TDXInput { get; set; }
public IEnumerable<IKlarfDefectList> KlarfDefectList { get; set; }
//some code
public virtual void WriteKlarf (ITDXInput<ISCContext, IToolContext, IWaferContainer> input, IEnumerable<IKlarfDefectList> defectList)
{
if (File.Exists(TemplatefilePath) && File.Exists(InputfilePath))
{
TDXInput = input;
KlarfDefectList = defectList;
//some more code
}
}
}
The function WriteKlarf is called here:
CIMParser ParserObj = new CIMParser(item, fileName, ParserConfigFilesConstants.CIMTemplateFilePath);
ParserObj.WriteKlarf(input, klarfDefectList);
But Visual studio tells me
Error CS1503 Argument 1: cannot convert from 'TDXXMLParser.Entity.CIM.CIMTDXInput' to 'TDXXMLParser.Entity.ITDXInput<TDXXMLParser.Entity.ISCContext, TDXXMLParser.Entity.IToolContext, TDXXMLParser.Entity.IWaferContainer>' TDXXMLParser C:\src\tdx2klarf\TDXXMLParser\TDXXMLParser\Helper\CIM\CIMConversionHelper.cs
I then tried to cast like so:
CIMParser ParserObj = new CIMParser(item, fileName, ParserConfigFilesConstants.CIMTemplateFilePath);
ParserObj.WriteKlarf((ITDXInput<ISCContext, IToolContext, IWaferContainer>)input, klarfDefectList);
But at run time I get the error:
System.InvalidCastException: Unable to cast object of type 'TDXXMLParser.Entity.CIM.CIMTDXInput' to type 'TDXXMLParser.Entity.ITDXInput`3[TDXXMLParser.Entity.ISCContext,TDXXMLParser.Entity.IToolContext,TDXXMLParser.Entity.IWaferContainer]'.
Why is this happening? My CIMTDXInput inherits directly from it's generic interface parent