帮助我在这里解决争论。
这是:
SqlCommand cmd = new SqlCommand( "sql cmd", conn);
与此完全相同:
const string s = "sql cmd";
SqlCommand cmd = new SqlCommand( s, conn);
IE中。如果我明确声明字符串s是const,那会不会有所作为。
而且,如果没有以同样的方式对待,为什么不呢?
答案 0 :(得分:7)
在后面的代码片段中,并不是字符串是const - 而是变量是const。这与C ++中的const不完全相同。 (字符串始终在.NET中不可变。)
是的,两个片段做同样的事情。唯一的区别是,在第一种形式中,你也会有s
的元数据条目,如果变量是在类型级别声明的(而不是局部变量),那么其他方法也可以使用它。当然,由于字符串实习,如果你在其他地方使用“sql cmd”,你仍然只在内存中有一个字符串 object ...但如果你看一下带有反射的类型,你会发现如果将const声明为常量字段,则将const作为元数据中的字段与第二个片段,如果它只是一个局部变量,则它将在PDB文件中构建一个。
答案 1 :(得分:2)
const
的值总是被直接刻录到调用者中,所以是的,它们是相同的。
此外,编译器实习源在源代码中找到 - 如果您多次使用相同的字符串,则const
会很有用(纯粹来自维护角度 - 结果两种方式都相同)。
答案 2 :(得分:1)
SqlCommand的构造函数不会“看到”任何差异,因此会以相同的方式运行。
答案 3 :(得分:1)
是的,那些完全一样。
答案 4 :(得分:1)
答案 5 :(得分:0)
我对此并不是100%肯定,但我敢打赌它是一样的。
const只会确保你没有重新定义变量,但它可以在编译时完成。
Morover,字符串是不可变的,所以我不认为声明变量会有什么不同。
但是,明确的证据是研究在这两种情况下生成的IL代码。