如何重写具有 out 参数的虚拟方法
本文关键字:参数 out 虚拟 方法 何重写 重写 | 更新日期: 2023-09-27 17:56:12
我的基类中有这个虚拟方法:
public virtual bool AgregarEtapa(DateTime pFechaIngreso, EtapaEnvio.Etapas pEtapa, OficinaPostal pUbicacion, string pNombreRecibio, out string pMensajeError)
{
string mensajeError = "";
bool sePuedeAgregar = false;
// more code
pMensajeError = mensajeError;
return sePuedeAgregar;
}
以及在子类中重写它的方法,如下所示:
public override bool AgregarEtapa(DateTime pFechaIngreso, EtapaEnvio.Etapas pEtapa, OficinaPostal pUbicacion, string pNombreRecibio, out string pMensajeError)
{
bool seHace = true;
bool exito = false;
// more code here
if (seHace)
{
base.AgregarEtapa(pFechaIngreso, pEtapa, pUbicacion, pNombreRecibio, out pMensajeError);
exito = true;
pMensajeError = ??;
}
return exito;
}
我从未在重写方法中使用过 out 参数,所以我不确定如何声明子方法的 out 参数。我想两个 out 参数(子参数和基参数)都应该以相同的方式调用,但我也不确定这一点。
基本上,我需要在子方法中使用基方法的 out 参数返回的相同值设置pMensajeError
。这应该如何工作?
不,你不需要设置pMensajeError = ??;
,至少不需要在你放置它的行。 pMensajeError
已由调用 base.AgregarEtapa
设置。如果确实要为其指定不同的值,则可以重新分配,但是如果要使用基类实现设置的值,则无需执行任何特殊操作。
您唯一需要记住的是,您对base.AgregarEtapa
的调用出现在if
块中。你需要考虑当if
条件为假时你想做什么,base.AgregarEtapa
永远不会被调用。
这可能看起来像这样:
if (seHace)
{
base.AgregarEtapa(pFechaIngreso, pEtapa, pUbicacion, pNombreRecibio, out pMensajeError);
exito = true;
}
else
{
pMensajeError = ??;
}
return exito;
删除pMensajeError = ??;
它在对基方法的调用中被分配。
但是,所有代码路径都必须导致它被分配,当seHace
为 false 时也必须分配它。可以在 else 语句中分配吗?