【发布时间】:2017-09-15 08:04:31
【问题描述】:
我有一个通用接口:
public interface IReader<T> where T: Result
{
IEnumerable<T> ReadResults();
}
其中Result 是一个基类并被扩展为DetailedResult:
public class Result
{
// ...
}
public class DetailedResult : Result
{
// ... ...
}
现在我有两个具体的IReader 类型,每个实现都返回不同的类型,特定于阅读器类型:
public class DefaultResultReader<Result> : IReader<Result>
{
IEnumerable<Result> ReadResults();
}
和
public class DetailedResultReader<DetailedResult> : IReader<DetailedResult>
{
IEnumerable<DetailedResult> ReadResults();
}
上述结构使用泛型。如果可能的话,我想摆脱它,并拥有某种工厂来为我创建IReader 的具体实现-DefaultResultReader.ReadResults() 方法必须返回Result 而DetailedResultReader.ReadResults() 必须返回DetailedResult
我的问题是抽象工厂应该如何寻找这个结构 - 如何设计它以便我可以根据要求创建特定的 IReader 对象?
【问题讨论】:
-
您能详细说明一下吗?你有什么问题?
-
我需要一个工厂,这样我就可以创建不同的
IReader对象-Ireader的每个具体实现都有特定的方法返回类型。 -
这一切都取决于你的工厂会是什么样子。如果您希望它完全通用,那么您需要考虑很多问题。但是,如果您想预定义哪种类型将返回什么阅读器,那么您真正需要的是检查
IReader<T> GetReader<T>() where T : Result会更容易。但是,在目前的状态下,这个问题确实很广泛。 -
很难更清楚地描述它——现在我所展示的都是基于泛型的——但我想摆脱它并拥有一个工厂来为我创建一个特定的 @ 实现987654337@ -
DefaultResultReader.ReadResults()总是返回Result和DetailedResultReader.ReadResults()总是返回DetailedReader
标签: c# generics polymorphism factory-pattern