为什么在setter之前定义getter(编码约定)

时间:2012-04-03 10:08:16

标签: c# properties coding-style conventions

我很欣赏这个问题有点傻,所以如果这是偏离主题或没有建设性,我会事先道歉。

为什么在C#中使用getter之前用getter定义属性是标准约定?对于具有这两者的属性,您几乎总是会在getter之前使用setter,因此它处于有效状态。因此,我首先定义吸气剂似乎有些落后。

此外,setter通常会有一些验证逻辑,而getter并不需要。在吸气剂之前使用这个逻辑以使其更清楚地表明属性应该如何表现是不是更整洁。例如:

public decimal Price
{
    get { return _price; }
    set
    {
        if(value < 0m)
        {
            throw new ArgumentOutOfRangeException();
        }

        _price = value;
        OnPropertyChanged("Price");
    }
}

setter中的代码比getter更有趣,如果它没有优先级并且首先被定义?

*我知道这些东西没有规则,但实际上每个例子都有,属性在setter之前定义了getter。

4 个答案:

答案 0 :(得分:16)

因为给予比接受更好。

更严重的是,我猜测是因为无论是谁编写了代码片段(或者是自动生成VS中的属性代码)都会下意识地选择此顺序。

然后,由于我们其余的人只是这位开拓性牧羊人的羊,我们毫无疑问地追随。

直到你。

你质疑我们曾经伟大的牧羊人,无政府状态只会随之而来。提交您的代码并为山丘奔跑。

答案 1 :(得分:11)

吸气剂通常要短得多(通常是单线),所以把它放在开头可以让你更好地概览,就像你喜欢这样:

if (condition)
{
    // Short code
}
else
{
    // Long code
    // Long code
    // Long code
    // Long code
    // Long code
    // Long code
    // Long code
    // Long code
    // Long code
    // Long code
    // Long code
    // Long code
    // Long code
    // Long code
    // Long code
    // Long code
    // Long code
}

而不是:

if (!condition)
{
    // Long code
    // Long code
    // Long code
    // Long code
    // Long code
    // Long code
    // Long code
    // Long code
    // Long code
    // Long code
    // Long code
    // Long code
    // Long code
    // Long code
    // Long code
    // Long code
    // Long code
}
else
{
    // Short code
}

而不仅仅是因为。

答案 2 :(得分:1)

getter和setter的顺序是完全无关紧要的,我认为约定的原因是Visual Studio的属性片段,它以这种方式生成属性(setter之前的getter)。所以在使用这个片段后,这个顺序已经成为大多数程序员(包括我自己)的一种不成文的,无意识的习惯。这当然不能解释VS设计师为什么以这种方式实现代码片段。我的意见是:他们不知道,他们并不关心它,或者因为g在英文字母表中比在s中更早出现。无论如何,世界上谁有这么多时间照顾?

答案 3 :(得分:0)

我认为重要的是一致性。虽然在你的例子中,setter“更有趣”,但我认为大多数时候都不一定如此。实际上,自动属性如此有用的原因之一是因为get和set代码只是在没有其他处理的情况下从私有字段读取/写入的频率,在这种情况下两者都不是“更有趣”。 / p>

在你自己的项目中,你当然可以自由地按照你喜欢的任何顺序放置它们,如果你决定首先根据“重要性”或其他原因来设置,那么你完全可以自由地这样做。然而,鉴于getter-before-setter约定的广泛性,如果您计划共享代码,那么为了那些可能需要在将来阅读或更改它的人而遵循约定是有意义的。