У меня есть небольшая проблема в моем коде здесь, я думаю, интересно:Как потупив перегруженный метод
foreach(ISceneNode node in (root as IGroupNode))
{
PreVisit(node);
if (notFound == false)
{
return node;
}
else
PostVisit(node);
}
Я пытаюсь вызвать методы PreVisit и PostVisit на узле объекта ISceneNode, который родительский класс для других типов узлов. Однако, поскольку это «слишком общее» из объектных отношений, я не имею право называть методы:
//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? Это потому, что он не знает, какой метод выбрать? Как я могу объяснить это в своем коде и обходным путем?
Это называется многократной (или динамической) отправкой. Вам нужен шаблон посетителя. – SLaks
У меня есть шаблон посетителя. – Musicode
Ум объясняет далее? Это фактически реализация класса SearchVisitor, который выполняет поиск по дереву этих узлов. – Musicode