C# 使用泛型和合成的链接方法
我试图对一系列“阶段”C#进行建模,其中每个阶段都有一个输入和输出,它们可以链接在一起,阶段1的输出成为阶段2的输入。我想它可能看起来像这样,但我不知道用什么来代替C# 使用泛型和合成的链接方法,c#,generics,C#,Generics,我试图对一系列“阶段”C#进行建模,其中每个阶段都有一个输入和输出,它们可以链接在一起,阶段1的输出成为阶段2的输入。我想它可能看起来像这样,但我不知道用什么来代替 public class Phase<TInput, TOutput> { private Phase<???, TInput> prerequisite; public Phase(Phase<???, TInput> prereq, Func<TInput, TOutput&g
public class Phase<TInput, TOutput>
{
private Phase<???, TInput> prerequisite;
public Phase(Phase<???, TInput> prereq, Func<TInput, TOutput> work)
{
/* ... */
}
}
有没有什么好的类型安全的方法来处理泛型?或者有人会考虑我的设计方案吗?我可以想象使用反射进行链接,或者仅仅使用对象进行输入和输出,但我希望有更好的方法。您可以尝试使用两个类:
public class OutputOfPhase<TOutput>
{
}
public class Phase<TInput, TOutput> : OutputOfPhase<TOutput>
{
private OutputOfPhase<TInput> prerequisite;
public Phase(OutputOfPhase<TInput> prereq, Func<TInput, TOutput> work)
{
/* ... */
}
}
公共类OutputOfPhase
{
}
公共类阶段:OutputOfPhase
{
专用输出相位先决条件;
公共相位(输出相位预请求,功能工作)
{
/* ... */
}
}
你可以这样使用它:
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 p1=新阶段(null,p=>p*1000L);
阶段p2=新阶段(p1,p=>p/2.0);
阶段
类派生自只包含类的输出部分的基类。您可以将一个类的输出传递给下一个类,而下一个类不需要知道上一个对象的输入。您的标题中不需要标记,标记系统可以工作。你应该给你的问题一个更具描述性的标题,这样人们可以看到它是关于什么的,而不是一个非常宽泛的描述。标题中标签的使用在上进行了讨论。听起来你可能在试图重新发明monads(或者comonads)。我的C#monads系列文章可能会对没有函数式编程背景的初学者有所帮助。
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);