【发布时间】:2020-07-08 07:33:42
【问题描述】:
我有一个通用类。而且这个泛型类需要有另一个与其成员相同的类的实例。
基本上,我正在尝试实现一系列操作。所以每个班级都必须知道下一项才能继续操作。
ChainedItem(Uri) -> ChainedItem(String) -> ChainedItem(MyClass) -> ....
这是我迄今为止尝试过的。
public abstract class ChainedItem<T>
{
private ChainedItem<R> m_chainedItem;
public void SetNextChainedItem(ChainedItem<R> chainedItem)
{
m_chainedItem = chainedItem;
}
public abstract void DoOperation(T data);
public virtual void ContinueNextOperation<R>(R data)
{
if(m_chainedItem != null)
m_chainedItem.DoOperation(data);
}
}
但我不能这样使用它,因为第 3 行中的 R 尚未定义。
【问题讨论】:
-
你应该像
public abstract class ChainedItem<T, R>这样声明你的类,使R在你的类中可用 -
在我看来你正在寻找构建一个 Monad。迄今为止我为 c# 程序员找到的对 Monads 的最佳解释is this one.
-
快速思考,使用 OOP 概念,引入 IChainable 之类的类或接口,添加 where T: IChainable 并使用具体接口 IChainable 代替 R。你所有的模型都需要实现这个接口,它会工作并且看起来很棒,希望^^。
标签: c# .net generics linked-list