隐式(默认)值与显式值

时间:2009-05-09 21:55:59

标签: c# .net

依赖隐式默认值是不好的做法,例如:

class Node
{
    int red;
    int green;
    int blue;

    bool grayscale;

    Node next;
}

而不是明确地设置它们:

class Node
{
    int red = 0;
    int green = 0;
    int blue = 0;

    bool grayscale = false;

    Node next = null;
}

8 个答案:

答案 0 :(得分:11)

不,我认为依靠默认值是可以的。明确地分配它们只会使代码混乱。此外,它的优点是可以更轻松地区分您为非默认值指定的字段。

答案 1 :(得分:7)

我会一直把它们放进去,因为它证明你已经考虑过这些成员的初始价值应该是什么。

bool isCool;

可能意味着“我知道这在创业时并不酷”,或者只是意味着你没有想到它。

bool isCool = false;

显然是一个慎重的决定。

答案 2 :(得分:3)

我不认为这是一种不好的做法,因为默认值是使用该语言的开发人员应该知道/被迫学习的东西。

唯一的缺点是,不列出默认值可能会导致人们永远不会看到初始值。如果它被初始化为默认值之外的其他东西,可能需要注意一点。

答案 3 :(得分:2)

这主要是主观的,imho。

对我而言,即使它是明确声明的默认值,它也太“罗嗦”了......在阅读代码时,它仍然会让我慢慢减速......让我们面对它......这是多余的。

我也认为代码更频繁,因为人们不知道默认值,或者有一些非理性的担心,他们可能会在C#5.0中将bool的默认值更改为true。

答案 4 :(得分:1)

答案 5 :(得分:1)

作为之前所有答案的替代方法,我用这些初始值放在构造函数中,所以我不打算在它之外寻找变量的初始值。

class Node
{
        int red;
        int green;
        int blue;

        bool grayscale;

        Node next;
        public Node() {
            red = 0;
            green = 0;
            blue = 0;

            grayscale = false;
            next = null;
        }
}

答案 6 :(得分:1)

开发人员有责任了解原始数据类型的默认值,因此它们不是绝对必要的。但是,正如一些人所指出的那样,它确实证明了你已经考虑过这个问题。

此外,代码中的绝大多数变量类型都是您创建的自定义类型。开发人员不负责了解自定义枚举的默认值。良好的沟通要求您在这些情况下指定默认值。由于我们是习惯的生物,因此最好养成始终初始化变量的习惯。只要在方法上保持一致,无论是在类级别还是在构造函数中执行它都没有区别。

答案 7 :(得分:0)

我更喜欢明确地给出值。它试图从内存中加载默认值对大脑的压力较小。最好让他们预先准备好。没有伤害。

string name = string.Empty;

Guid userID = Guid.Empty;