我正在从事一个C#项目,以解析不同类型的文件。为此,我创建了以下类型的类结构:
interface FileType {}
class FileType1 : FileType {}
class FileType2 : FileType {}
abstract class FileProcessor<T> {}
class Processor_FileType1 : FileProcessor<FileType1> {}
class Processor_FileType2 : FileProcessor<FileType2> {}
现在,我想创建一个工厂模式,它只需要获取文件的路径
根据文件的内容决定实例化2个处理器中的哪一个
。
理想情况下(我知道这段代码不起作用),我希望我的代码看起来如下:
class ProcessorFactory
{
public FileProcessor Create(string pathToFile)
{
using (var sr = pathToFile.OpenText())
{
var firstLine = sr.ReadLine().ToUpper();
if (firstLine.Contains("FIELD_A"))
return new Processor_FileType1();
if (firstLine.Contains("FIELD_Y"))
return new Processor_FileType2();
}
}
}
问题是编译器错误
Using the generic type 'FileProcessor<T>' requires 1 type arguments
因此,我的程序可以执行以下操作:
public DoWork()
{
string pathToFile = "C:/path to my file.txt";
var processor = ProcessorFactory.Create(pathToFile);
}
以及
processor
变量wold可以是a
Processor_FileType1
或
Processor_FileType2
。
我知道我可以通过改变
Create
接受类型参数,但我希望我不必这样做,因为这会扼杀根据文件中的数据计算出来的想法。
有什么想法吗?