vmg*_*vmg 5 c# string constants
类级字符串常量与方法级字符串常量之间有什么显着差异吗?编译器会识别常量并应用常量折叠吗?或者总是会创建 nw 对象?
这是示例:类级常量
class A
{
private const string Sid = "sid";
private const string Pid = "pid";
public void Do()
{
Console.WriteLine(Sid);
Console.WriteLine(Pid);
}
}
Run Code Online (Sandbox Code Playgroud)
方法级常量:
class B
{
public void Do()
{
const string Sid = "sid";
const string Pid = "pid";
Console.WriteLine(Sid);
Console.WriteLine(Pid);
}
}
Run Code Online (Sandbox Code Playgroud)
字符串常量是较新的“内联”*,因为它们是真正的对象。编译器总是将同一字符串常量的各个部分合并在一起(即“a”+“b”与指定“ab”相同)。
字符串常量也可以“驻留”——这意味着相同值的所有常量都引用同一个实际字符串对象(据我所知,C# 编译器总是这样做)。
除了在编译时尽可能多地计算之外,数字常量还可以“内联”到使用它们的位置(即 2*2*4 与指定 16 相同)。
为了实现“共享常量”行为,需要使用readonly字段而不是const.
*“内联”直接放入结果代码中,而不是引用共享值。
| 归档时间: |
|
| 查看次数: |
1895 次 |
| 最近记录: |