【问题标题】:c# get and set methods vs. method overload: Which is better?c# get 和 set 方法与方法重载:哪个更好?
【发布时间】:2018-05-11 06:12:45
【问题描述】:

我可以这样做:

{
    void SetAnything(para, para, para) {...}
    int GetAnything(para, para) {...}
}

.. 或者我可以这样做:

{
    int Anything(para, para, para) {...}
    int Anything(para, para) {...}
}

我必须决定走哪条路,所以我问你:

这两种方法之间的首选方法是什么?为什么?


编辑:

感谢到目前为止的回复。由于不完全清楚,我的方法在做什么,我重写了一些例子:

{
    void SetBudget(department, year, decimal value) {...}
    decimal GetBudget(department, year) {...}
}

.. 或者我可以这样做:

{
    decimal Budget(department, year, decimal value) {...}
    decimal Budget(department, year) {...}
}

.. 甚至:

{
    void Budget(department, year, decimal value) {...}
    decimal Budget(department, year) {...}
}

仍然首选 Set/Get 前缀?

【问题讨论】:

  • 你在 C# 中有一些叫做属性的东西,用于 getter 和 setter...
  • 第二个代码sn-p中带3个参数的方法如何返回int?在第一个代码sn-p中是无效的。
  • @MichałTurczyn 不,属性没有参数。
  • @Sweeper 好吧,在 setter 中有 value,在 getter - 为什么需要参数...我想我不完全理解问题:)

标签: c# naming-conventions


【解决方案1】:

这并没有以任何人期望的方式超载。你显然在做两件不同的事情(设置和获取)。

发布编辑


不过,事实上,“重载”实际上是在完成两个不同的目标;一个是设置,一个是获取。如果您为此使用给定的构造,那将不是问题;特性。但由于您实际上是在重载一个方法,所以这并不典型。

【讨论】:

    【解决方案2】:

    显然,第一种方法是正确的,而第二种方法不鼓励

    如果您正在寻找一种方法来定义自定义 getter 和 setter,则命名应为:

    Get[variable name]
    Set[variable name]
    

    所以你现在可以说出你在做什么,你和其他人更容易清楚地看到代码在做什么。

    为完全不同的目的重载一种方法会导致代码混乱,您正在为完全不同的目的调用一种方法(但重载版本)。在代码中,您将如何决定使用哪个重载?只是通过参数的数量?对我来说听起来像是一场噩梦......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-07
      • 1970-01-01
      • 2013-12-26
      • 1970-01-01
      • 2020-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多