4

类级字符串常量与方法级字符串常量之间是否存在显着差异。编译器会识别常量并应用常量折叠吗?或者总是会创建 nw 对象?

这是示例:类级常量

class A
    {
        private const string Sid = "sid";
        private const string Pid = "pid";

        public void Do()
        {
            Console.WriteLine(Sid);
            Console.WriteLine(Pid);
        }
    }

方法级常量:

class B
    {
        public void Do()
        {
            const string Sid = "sid";
            const string Pid = "pid";

            Console.WriteLine(Sid);
            Console.WriteLine(Pid);
        }
    }
4

2 回答 2

1

The difference between the constants is in scope - just as with a non-const declaration, the main thing to consider is from where these values can be accessed. Now, which declaration is cleaner is irrelevant enough to be worthy of an epic flame war...

于 2013-03-06T01:40:27.030 回答
1

字符串常量是较新的“内联”*,因为它们是真正的对象。编译器总是将相同字符串常量的部分加在一起(即“a”+“b”等同于指定“ab”)。

字符串常量也可以“interned”——这意味着相同值的所有常量都指的是同一个实际的字符串对象(据我所知,C# 编译器总是这样做)。

除了总是在编译时尽可能多地计算之外,数字常量可以“内联”到使用它们的地方(即 2*2*4 与指定 16 相同)。

要实现“共享常量”行为,需要使用readonly字段而不是const.

*"inline" 直接放入结果代码中,而不是引用共享值。

于 2013-03-06T01:53:57.417 回答