重载方法可以转换其参数然后调用其原始方法吗?

问题描述 投票:0回答:2

我希望重载当前采用单个

int
参数的方法。 重载将改为采用
double
decimal

重载不是将其参数投射到顶部,然后具有与原始代码完全相同的代码,而是可以像这样调用原始代码吗?

int total = 0;

public void AddToTotal(int x)
{
    total += x;
}

public void AddToTotal(double x)
{
    AddToTotal((int)x);
}

public void AddToTotal(decimal x)
{
    AddToTotal((int)x);
}
c# overloading
2个回答
7
投票

我认为这不是一个好主意,因为您向呼叫者隐藏了重要信息。 如果您仅公开

int
重载,调用者可以选择将
double
转换为
int
,因为知道它将被截断为整数。但是,如果您公开显式采用
double
的重载,我希望添加而不是截断
double
值。

如果您的方法在转换时失去精度,请使其显式,而不是隐藏在重载中。


0
投票

在我看来,方法重载是一种危险的做法,必须非常小心地使用,或者根本不使用。请阅读我关于这个主题的博客文章:方法重载的隐藏危险。在本文中,我认为方法重载可能会对代码质量产生负面影响。它使我们在同一个名称下维护两个或多个实现,从而产生隐藏语义,然后不可避免地导致误解和功能缺陷。

© www.soinside.com 2019 - 2024. All rights reserved.