Generiske klasser og casting
Hej EksperterJeg forsøger at læse og parse data fra forskellige filtyper. Logikken er, at jeg vil kunne læse data fra et antal forskellige filtyper og uanset filtypen returnere data i samme type objekt.
Derfor har jeg lavet en abstract klasse med to abstrakte metoder og 1 public, der tillader at læse flere filer på 1 gang.
public abstract class AbstractImportFactory<T>
protected abstract T ReadFile(string fileName);
protected abstract IEnumerable<MyDataType> Parse(T model);
public List<MyDataType> ReadFiles(string[] filePaths)
{
List<MyDataType> list = new List<MyDataType>();
foreach (string filePath in filePaths)
{
T model = ReadFile(filePath);
foreach(MyDataType mdt in Parse(model);
list.Add(mdt)
}
return list;
}
Så har jeg lavet 1 klasse for hver filtype jeg gerne vil understøtte a la
public class FileType1ImportFactory : AbstractImportFactory <FileType1DataModel>
Bemærk at jeg har udspecificeret det generiske T i klassen til den relevante lokale datamodel klasse.
Jeg løber ind i problemer, når jeg forsøger at implementere et factory pattern i hovedklassen.
public abstract class AbstractImportFactory<T>
{
....
public static AbstractImportFactory<T> GetFactory(ImportFormat iFormat, BackgroundWorker worker)
{
switch (iFormat)
{
case ImportFormat.NotSpecified:
break;
case ImportFormat.FileType1Format:
return new FileType1ImportFactory (worker) <- Fejl
default:
throw new ArgumentOutOfRangeException("iFormat");
}
}
FileType1ImportFactory er som jeg ser det en AbstractImportFactory<T>, hvor T er sat til "FileType1DataModel".
Hvordan caster jeg FileType1ImportFactory til AbstractImportFactory<T>?