在C#中使用通用类型实现接口的类的工厂?

用户名

我需要创建一种处理文件的一般方法。根据文件需要执行的操作,应使用特定的类。我使用ASP和C#。文件被上传后,我将分析文件,创建一个分析结果对象,并向用户显示基于该对象的分析结果。用户读取分析结果,然后继续进行(单击按钮)。如果他愿意,我将采取该分析结果对象并根据该对象执行操作(处理)。我向用户显示了处理结果。

根据某些查询参数(为简单起见),文件应由不同的类处理。处理器需要特定于分析器具体实现的分析结果(分析一个文件的结果可能包括自定义类的列表,不同文件分析的结果可能包含其他特定字段)。处理器需要那些特定于实现的细节才能完成工作。

我尝试创建一般项目,但被卡住了。

工厂中的magicId是一个查询参数,用于指定应使用哪个类来解析/分析文件。

有没有一种方法可以创建一个类的工作工厂,这些工厂都实现一个通用类型的接口?

abstract class AnalysisResult
{
}

interface IAnalyzer<TAnalysisResult>
    where TAnalysisResult : AnalysisResult
{
    TAnalysisResult PerformAction(string input);
}

class ConcreteAnalysisResult : AnalysisResult {
    public int SpecificProperty { get; set; }
}

class ConcreteAnalyzer : IAnalyzer<ConcreteAnalysisResult>
{
    public ConcreteAnalysisResult PerformAction(string input)
    {
        return new ConcreteAnalysisResult() { SpecificProperty = input.Length };
    }
}

class AnAnalyzerFactory
{
    IAnalyzer<AnalysisResult> CreateByMagicId(int magicId)
    {
        return new ConcreteAnalyzer();
    }
}
穆罕默德·阿塔斯(MehmetAtaş)

声明TAnalysisResult为协变。有关详细信息,您可以检查协方差和协方差

interface IAnalyzer<out TAnalysisResult> // note out keyword
    where TAnalysisResult : AnalysisResult
{
    TAnalysisResult PerformAction(string input);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章