gpt4 book ai didi

c# - 我应该在重载方法上使用不同的返回类型吗?

转载 作者:太空狗 更新时间:2023-10-29 22:11:35 26 4
gpt4 key购买 nike

对于重载方法返回不同的返回类型,是否有任何最佳实践?例如,如果我的 DAL 中有一个 Load 方法,我想加载单个项目或一堆项目。我知道我可以使用多种方法:

加载一个对象

MyBusinessObject LoadOne(int id)
{
}

加载多个对象

MyBusinessObject[] LoadMany(params int[] ids)
{
}

现在我知道我可以做的是重载一个方法并具有不同的返回类型。像这样:

MyBusinessObject Load(int id)
{
}

MyBusinessObject[] Load(params int[] ids)
{
}

虽然似乎没有什么可以阻止我这样做,并且从 API 的角度来看它可以保持整洁,但这看起来是个好主意吗?我昨晚遇到了它,我的一部分认为我不应该这样做,因为我想为重载方法匹配返回类型。

我还可以让 Load(int id) 方法返回一个只包含一项的集合。在我看来,这违反了最小惊奇原则,因为如果您希望返回一个项目,则应该返回该项目,而不应返回包含单个项目的列表。

所以这是我围绕这些想法的相互矛盾的想法:

  • 重载方法都应该返回相同的类型。
  • 如果方法做同样的事情,不要给它们一堆不同的名字,重载相同的方法名。从 API 用户的角度来看,它使事情变得更简单,他们不必浏览一堆不同的方法,这些方法本质上都做同样的事情,但参数不同。
  • 返回该方法最明显的类型,即如果用户可能期望一组项目,则返回一组项目,如果他们可能期望单个项目,则返回单个项目。<

因此后两种想法在某种程度上超过了第一种,但与此同时,第一种想法似乎是某种程序化最佳实践。

围绕这种做法是否有任何最佳做法?我很想听听其他人对此主题的看法。

最佳答案

我可能会想使 API 显式化并在名称中使用复数形式:

Customer LoadCustomer(int id) {...}
Customer[] LoadCustomers(params int[] id) {...}

实际上,params 在这里很少有用——您通常在编译时不知道这些 id。

关于c# - 我应该在重载方法上使用不同的返回类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1551496/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com