如何重写具有 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。这应该如何工作?

如何重写具有 out 参数的虚拟方法

不,你不需要设置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 语句中分配吗?