如何覆盖具有 out 参数的虚方法?
How to override a virtual method that has an out parameter?
我的基础中有这个虚拟方法class:
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;
}
以及在子 class 中覆盖它的方法,如下所示:
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 参数。我想两个输出参数(child 和 base)应该以相同的方式调用,但我也不确定。
基本上,我需要在子方法中设置 pMensajeError
与基本方法的 out 参数返回的值相同。
这应该如何工作?
删除pMensajeError = ??;
它在调用基本方法时被赋值。
但是,所有代码路径都必须导致它被分配,当 seHace
为 false 时也必须被分配。可以在else语句中赋值吗?
不,您不需要设置pMensajeError = ??;
,至少不需要在您放置它的那一行。 pMensajeError
已通过调用 base.AgregarEtapa
设置。如果你真的想给它一个不同的值,你可以重新分配,但如果你想使用基础 class 实现设置的值,你不需要做任何特殊的事情。
您唯一需要记住的是,您对 base.AgregarEtapa
的调用出现在 if
块中。您需要考虑当 if
条件为假且 base.AgregarEtapa
永远不会被调用时您想做什么。
这可能看起来像这样:
if (seHace)
{
base.AgregarEtapa(pFechaIngreso, pEtapa, pUbicacion, pNombreRecibio, out pMensajeError);
exito = true;
}
else
{
pMensajeError = ??;
}
return exito;
我的基础中有这个虚拟方法class:
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;
}
以及在子 class 中覆盖它的方法,如下所示:
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 参数。我想两个输出参数(child 和 base)应该以相同的方式调用,但我也不确定。
基本上,我需要在子方法中设置 pMensajeError
与基本方法的 out 参数返回的值相同。
这应该如何工作?
删除pMensajeError = ??;
它在调用基本方法时被赋值。
但是,所有代码路径都必须导致它被分配,当 seHace
为 false 时也必须被分配。可以在else语句中赋值吗?
不,您不需要设置pMensajeError = ??;
,至少不需要在您放置它的那一行。 pMensajeError
已通过调用 base.AgregarEtapa
设置。如果你真的想给它一个不同的值,你可以重新分配,但如果你想使用基础 class 实现设置的值,你不需要做任何特殊的事情。
您唯一需要记住的是,您对 base.AgregarEtapa
的调用出现在 if
块中。您需要考虑当 if
条件为假且 base.AgregarEtapa
永远不会被调用时您想做什么。
这可能看起来像这样:
if (seHace)
{
base.AgregarEtapa(pFechaIngreso, pEtapa, pUbicacion, pNombreRecibio, out pMensajeError);
exito = true;
}
else
{
pMensajeError = ??;
}
return exito;