我正在尝试模拟一系列“阶段”C#,其中每个阶段都有输入和输出,并且它们可以链接在一起,第1阶段的输出成为阶段2的输入。我认为它可能看起来像这样,但我不知道用什么代替???。
public class Phase<TInput, TOutput>
{
private Phase<???, TInput> prerequisite;
public Phase(Phase<???, TInput> prereq, Func<TInput, TOutput> work)
{
/* ... */
}
}
我最终要做的是将这样的一系列步骤链接在一起(其中“添加”方法只是帮助我创建阶段的便捷方法):
var p1 = AddInitialPhase(() =>
{
int a = /* some initial result */;
return a;
});
var p2 = AddPhase(p1, (result) =>
{
string b = /* do something with result from p1 */
return b;
});
var p3 = AddPhase(p2, (result) =>
{
/* etc... */
});
使用泛型有什么好的类型安全方法吗?或者有没有人有我应该考虑的设计方案?我可以想象使用反射来进行链接,或仅使用对象作为输入和输出,但我希望有更好的方法。
答案 0 :(得分:3)
您可以尝试使用两个类:
public class OutputOfPhase<TOutput>
{
}
public class Phase<TInput, TOutput> : OutputOfPhase<TOutput>
{
private OutputOfPhase<TInput> prerequisite;
public Phase(OutputOfPhase<TInput> prereq, Func<TInput, TOutput> work)
{
/* ... */
}
}
你用这种方式:
Phase<int, long> p1 = new Phase<int, long>(null, p => p * 1000L);
Phase<long, double> p2 = new Phase<long, double>(p1, p => p / 2.0);
Phase
类派生自仅包含类的输出部分的基类。您可以将类的输出传递给下一个类,而下一个类不需要知道前一个对象的输入。