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