我有这个 :
public class CChainElement
{
public CChainElement m_Prev, m_Next;
}
public class CChainList : IEnumerable
{
public CChainElement m_First;
internal void Add(CChainElement Element)
{
if (m_First != null)
m_First.m_Prev = Element;
Element.m_Next = m_First;
m_First = Element;
}
}
public class CEntity : CChainElement
{
}
public class CItem : CEntity
{
}
public class CTest
{
void Test()
{
CChainList AllItem = new CChainList();
CItem Item = new CItem();
AllItem.Add(Item);
CItem FirstItem = AllItem.m_First as CItem;
CItem SecondItem = FirstItem.m_Next as CItem;
}
}
我想切换到这样的东西:
public class CChainElement<T> where T : CChainElement<T>
{
public T m_Prev, m_Next;
}
public class CChainList<T> : IEnumerable where T : CChainElement<T>
{
public T m_First;
internal void Add(T Element)
{
if (m_First != null)
m_First.m_Prev = Element;
Element.m_Next = m_First;
m_First = Element;
}
}
public class CEntity : CChainElement<CEntity>
{
}
public class CItem : CEntity
{
}
public class CTest
{
void Test()
{
CChainList<CItem> AllItem = new CChainList<CItem>();
CItem Item = new CItem();
AllItem.Add(Item);
CItem FirstItem = AllItem.m_First; // Yeepee, no more "as CItem" ..! ;-)
CItem SecondItem = FirstItem.m_Next;
}
}
我得到的错误是CItem can't be converted to CChainElement<CItem>
.
所以我的问题是:是否有任何约束public class CChainElement<T>
,所以它会优雅地采用 CItem,即使它不直接从 CChainElement 继承?
我的目标显然是所有继承自CChainElement<T>
能够与我的通用列表类一起列出的类,同时避免显式转换。
提前感谢您的帮助!
编辑:在我的完整项目中,CEntity 作为一个抽象类用于许多不同的事情(即:我可以通过它以与 Items 类似的方式操纵 Monsters),因此不能将其更改为通用的CEntity<T>
.