首先:我正在使用C ++ - CLI,但是,正如用户所问,我认为这也适用于C#,这就是我添加此标记的原因。
我有以下功能
static CFiducial^ CFiducial::GetCommonBase (array<CFiducial^>^ i_aoFiducial)
{
if (!i_aoFiducial || i_aoFiducial->Length <= 0)
return gcnew CFiducial;
CFiducial^ oFiducial;
for (int iCnt = 0; iCnt < i_aoFiducial->Length; iCnt++)
{
if (!i_aoFiducial[iCnt]) continue;
if (oFiducial)
oFiducial= oFiducial->GetCommonBase (i_aoFiducial[iCnt]);
else
i_aoFiducial[iCnt]->CopyTo (oFiducial);
}
return oFiducial;
}
在多个班级中以相同的方式使用
(还有另一个成员函数GetCommonBase (CFiducial^)
,它将成员变量内容与传递对象成员的内容进行比较,并返回一个只有那些成员设置相等的新对象。请参阅下面的示例) 。
我现在打算将这个静态函数的所有实现外包,并将它们移动到一个中心位置,只有一个实现。我尝试过泛型和接口,但都失败了:
这是将要使用的界面:
public interface class ICommonBase
{
ICommonBase^ GetCommonBase (ICommonBase^);
void CopyTo (ICommonBase^%);
};
我无法在实际的类中实现GetCommonBase (ICommonBase^)
,我需要实现GetCommonBase (CLASSNAME^)
,但这与接口中的定义不匹配。
有没有办法解决这个问题?
接口和泛型是否有另一种选择?
我仍然希望避免将该函数复制并粘贴到我需要它的每个类中。
修改
成员函数GetCommonBase()
的示例,它来自不同的类,其中实际使用了继承,因此名称。上面描述的问题与继承无关。
CImageObject^ CImgObjCircle::GetCommonBase (CImageObject^ i_oImageObject)
{
CImageObject^ oImgObj;
if (!i_oImageObject)
{
this->CopyTo (oImgObj);
return oImgObj;
}
oImgObj = CImageObject::GetCommonBase (i_oImageObject);
CImgObjCircle^ i_oImgObj = dynamic_cast<CImgObjCircle^>(i_oImageObject);
if (!i_oImgObj)
return oImgObj;
CImgObjCircle^ oImgObjLocal = gcnew CImgObjCircle;
oImgObj->CopyTo (oImgObjLocal);
if (m_oDiameterX == i_oImgObj->m_oDiameterX) oImgObjLocal->m_oDiameterX = m_oDiameterX;
return oImgObjLocal;
}