静态变量和常量变量之间的差异

时间:2015-05-28 20:16:34

标签: c# variables static const global

声明全局变量时,“static”和“const”之间有什么区别;

namespace General
{
    public static class Globals
    {
        public const double GMinimum = 1e-1;

        public const double GMaximum = 1e+1;
    }
}

哪一个更好(考虑到这些变量永远不会改变)

namespace General
{
    public static class Globals
    {
        public static double GMinimum1 = 1e-1;

        public static double GMaximum1 = 1e+1;
    }
}

3 个答案:

答案 0 :(得分:10)

const 并且readonly对数据成员执行类似的功能,但它们有一些重要的区别。 常量成员在编译时定义,不能在运行时更改。常量使用const关键字声明为字段,必须在声明时初始化。

static 修饰符用于声明静态成员,这意味着该成员不再绑定到特定对象。该值属于该类,另外可以在不创建类实例的情况下访问该成员。只存在静态字段和事件的一个副本,静态方法和属性只能访问静态字段和静态事件

答案 1 :(得分:7)

编译时间后,

const个变量无法更改。它们适用于真正恒定的事物(即pi)

static成员是共享内存,可以被特定类的所有实例访问,如果使用像public这样的访问修饰符,则会更多(这些可能与javascript等语言中的全局变量一样)。静态成员的行为类似于可以在任何时候重新分配的普通变量。

在您的情况下,如果保证数字永远不会改变,那么将它们设为const。如果它们确实发生了变化,则必须使用新值重新编译程序。

哪一个更好?如果使用const,那么文字值将被加入到程序集中并提供性能提升。

如果值需要更改,那么更改源和重新编译所需的时间很快就会破坏这种边际性能提升。

答案 2 :(得分:3)

const是一个常量值,无法更改。它被编译到程序集中。

static表示它是一个与实例无关的值,可以在运行时更改(因为它不是readonly)。

因此,如果值永远不会更改,请使用consts。