【发布时间】:2014-11-07 22:43:35
【问题描述】:
代码引用的常量在编译成 IL 时会被它们的实际值替换。
由于公共常量可以被特定程序集之外的代码引用,因此将它们存储在程序集的元数据中是有意义的。
但是为什么私有常量存储在那里?在定义它们的程序集的代码的 IL 中没有对这些常量的引用,并且它们不会被公开在程序集之外被引用。
那么在编译完代码后需要访问这些值吗?
在我看来,程序集中的所有常量都应该是公共的,而私有常量应该是一种语言级别的功能,它只会导致编译器发出文字值。
【问题讨论】:
-
因为 BindingFlags.NonPublic。当您陷入困境并且程序员没有拿起电话来帮助您时,能够戳私处非常方便。
-
但是访问那个私有常量有什么用呢?没有 IL 引用该常量。所有这一切都告诉你有人决定使用常量而不是在某处硬编码一个值。
-
当然是“IL 引用该常量”。它嵌入在IL中。如果你永远找不到它的用途,那么生活就是美好的。
-
我的意思是使用常量的代码和使用文字的代码之间的 IL 没有区别。换句话说,声明(在 C# 中)
private const string MYCONST = "Hello World"然后执行Console.WriteLine(MYCONST)导致与执行Console.WriteLine("Hello World")相同的 IL。
标签: .net .net-assembly il