我的代码中有一个小问题,我认为这很有趣:
foreach(ISceneNode node in (root as IGroupNode))
{
PreVisit(node);
if (notFound == false)
{
return node;
}
else
PostVisit(node);
}
我试图在 ISceneNode 对象节点上调用 PreVisit 和 PostVisit 方法,这是其他类型节点的父类。但是,因为这是对象关系的“太笼统”,所以我不允许调用方法:
//methods
void PreVisit(IDrawableNode drawable)
{
string targetName = drawable.Name;
Boolean notFound = true;
CompareToTarget(targetName, notFound, drawable);
}
void PreVisit(ITransformNode transform)
{
string targetName = transform.Name;
Boolean notFound = true;
CompareToTarget(targetName, notFound, transform);
}
void PreVisit(IStateNode state)
{
string targetName = state.Name;
Boolean notFound = true;
CompareToTarget(targetName, notFound, state);
}
void PreVisit(IGroupNode group)
{
string targetName = group.Name;
Boolean notFound = true;
CompareToTarget(targetName, notFound, group);
}
IGroupNode、IStateNode 等从 ISceneNode 派生出来……那为什么我不能只使用 ISceneNode 来调用这个重载方法呢?是因为它不知道选择哪种方法吗?如何在我的代码中解释这一点并解决它?