按范围定义常量

时间:2010-12-01 15:49:32

标签: c# constants

我一直习惯在课堂上定义常量:

public class MyClass
{
    private const int SomeNumber = 10;
    ...
}

但是,我最近与一个认为如果常量仅由特定方法使用的人合作,那么应该在该方法中定义:

public class MyClass
{
    public void SomeMethod()
    {
        const int SomeNumber = 10;
        ...
    }
}

我唯一的理由是,如果在其他方法中需要常量,则不需要重构,并且它更容易更新常量,因为它们将在同一个地方定义。

是否有任何其他利弊或没有真正的区别?

4 个答案:

答案 0 :(得分:5)

如果需要更新,它不是真正的常量。我的意思是,你不经常重构Pi的价值。在我看来,更改的内容属于配置文件。

那就是说,我通常使用班级公共常量。 我从未见过或使用过方法级常量。从概念上讲,方法级别常量对我来说没什么意义。

答案 1 :(得分:1)

方法级别const向编译器提示变量不会更改,因此可以针对该情况进行优化。如果您习惯于在您的方法中对字符串或数字进行硬编码而不在这些方法之外使用,那么这很好。这不是,imho,一个好习惯。

答案 2 :(得分:1)

反对全局,单身等的一个常见理由是,所有事物的范围应尽可能(合理地)限制。我同意 - 范围越小,当有人混淆代码时代码越少,代码越少,代码就越少。这种推理并不完全适用于常数。但是,如果仅在单一方法中需要它,那么在那里定义它。如果只是为了防止一些傻瓜在一个完全不相关的环境中使用它,因为它恰好适合,当“常量” 改变时破坏东西(这不应该经常 - 否则它不是常数但是应该进入配置文件 - 但仍然。)

至于“如果其他方法需要访问常量,则重构更少”...... YAGNI。

答案 3 :(得分:0)

我会采用你至少在班级定义的方法。所以通过各种类的方法可以看出相同的常数。

甚至更好的方法

在一个类中定义所有常量,以便所有这些常量可以通过不同的类看到你的解决方案,如果你想在常量计算中改变某些逻辑,你可以在一个中心位置进行。