为什么C#限制了可以声明为const的类型集合?

33 浏览
0 Comments

为什么C#限制了可以声明为const的类型集合?

编译器错误CS0283表明,只有基本的POD类型(以及字符串、枚举和空引用)可以声明为const。有人对此限制有什么理论吗?例如,希望能够声明其他类型的常量值,例如IntPtr。

我认为,在C#中,const的概念实际上是语法糖,它只是用字面值替换名称的任何使用。例如,给定以下声明,任何Foo的引用都会在编译时替换为“foo”。

const string Foo = "foo";

这将排除任何可变类型,因此也许他们选择了这个限制,而不是在编译时确定给定类型是否是可变的?

admin 更改状态以发布 2023年5月23日
0
0 Comments

有没有人对这个限制有什么理论?

如果允许只是一个理论,那么我的理论是原始类型的const值可以在MSIL的文字opcode参数中表示...但其他非原始类型的值不能,因为MSIL没有语法来表达用户定义类型的值。

0