初学,常量 byte[] 不能初始化时赋值吗?

老张一笑 2011-10-16 10:17:18

const byte[] auchCRCLo= {0x00,0xc0,0xc1,0x01,0xc3,0x03,0x02,0xc2}



编译不通过啊,变量可以.
请问常量有什么好方法?
...全文
255 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2011-10-17
  • 打赏
  • 举报
回复
不可以。
只有简单类型(int float char 等值类型,以及string)可以使用const。

对于引用类型,是不可以的。

即便你使用 readonly 修饰一个引用类型,也只是说这个引用是只读的,而不是说引用的对象是只读的。

比如
readonly byte[] auchCRCLo = { 0x00, 0xc0, 0xc1, 0x01, 0xc3, 0x03, 0x02, 0xc2 };

auchCRCLo = new byte[] { }; //错误,因为引用是只读的。
auchCRCLo[1] = 0x00; //正确,因为引用指向的对象仍然可以改写。

2L的办法是一种变通的办法。
ruanwei1987 2011-10-17
  • 打赏
  • 举报
回复
学习了 mark
阿建像熊猫 2011-10-17
  • 打赏
  • 举报
回复
只有简单类型(int float char 等值类型,以及string)可以使用const。
krenyelang 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 caozhy 的回复:]
不可以。
只有简单类型(int float char 等值类型,以及string)可以使用const。

对于引用类型,是不可以的。

即便你使用 readonly 修饰一个引用类型,也只是说这个引用是只读的,而不是说引用的对象是只读的。

比如
readonly byte[] auchCRCLo = { 0x00, 0xc0, 0xc1, 0x01, 0xc3, 0x03, 0x……
[/Quote]
赞同!
classbob 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 caozhy 的回复:]

不可以。
只有简单类型(int float char 等值类型,以及string)可以使用const。

对于引用类型,是不可以的。

即便你使用 readonly 修饰一个引用类型,也只是说这个引用是只读的,而不是说引用的对象是只读的。

比如
readonly byte[] auchCRCLo = { 0x00, 0xc0, 0xc1, 0x01, 0xc3, 0x03, 0……
[/Quote]
C#语法上是允许引用类型为const的,只是只能初始化为null而已(string除外),因此没有什么实际用途
至于元素只读,定义成long是个好主意,但显然没什么通用性,更通用的做法是提供运行期检查:
static readonly IList<byte> auchCRCLo = new List<byte> { 0x00, 0xc0, 0xc1, 0x01, 0xc3, 0x03, 0x02, 0xc2 }.AsReadOnly();
showjim 2011-10-16
  • 打赏
  • 举报
回复
8个字节刚好一个ulong可以const
classbob 2011-10-16
  • 打赏
  • 举报
回复
定义为static readonly
除了string外,其他的引用类型如果定义成const只能初始化为null

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧