我有一个泛型集合,其中包含集合中的项目需要调用的方法。每个项目都有对泛型集合的引用。问题是我不能将每个项目的类型用作传递给泛型集合的类型。
这个想法是这样的(我知道它不能编译):
public class MyCollection<T>
{
public void Call(T item) { ... }
}
public abstract class MyItemBase
{
protected MyCollection<typeof(this)> _collection;
public MyItem(MyCollection<typeof(this)> collection)
{
this._collection = collection;
}
public DoSomething()
{
this._collection.Call(this);
}
}
public class MyItem : MyItemBase
{
}
显然,你不能声明 MyCollection<typeof(this)>
,但我认为通过这种方式编写,你可以大致了解我正在尝试做什么。基本上,我希望抽象类对集合的引用意味着 MyCollection<MyClass>
。
有没有办法让这项工作?
答案 0 :(得分:1)
首先,为什么您的ItemBase类包含ItemCollection?如果不是反之亦然,那么Collection类应该包含Items?
但是对于您的问题上下文,如果您以这种方式设计类,则可以输入类型:
public class MyCollection<T> where T : MyItemBase<T>
{
public void Call(MyItemBase<T> item) { }
}
public abstract class MyItemBase<T> where T : MyItemBase<T>
{
protected MyCollection<T> _collection;
protected MyItemBase(MyCollection<T> collection)
{
_collection = collection;
}
public void DoSomething()
{
_collection.Call(this);
}
}
public class MyItem : MyItemBase<MyItem>
{
public MyItem(MyCollection<MyItem> Collection)
: base(Collection)
{
}
}