C# 什么';对字节[]调用Initialize()时的结果是什么?
在调用Initialize()之后,上面的C# 什么';对字节[]调用Initialize()时的结果是什么?,c#,.net,C#,.net,在调用Initialize()之后,上面的bytesbyte数组中的默认值是什么?all null\0?注意,它将值类型初始化为默认构造值,但如果它们是内置的,则不会。因此,在这种情况下,该方法是不可行的。但是,由于尚未提供初始值设定项(请参阅),因此在创建数组后它将被设置为0。通常,您可能不想使用此方法。从文件来看 “这种方法旨在帮助 编译器支持值类型数组; 大多数用户不需要此方法。它 不得在引用类型上使用 阵列。” 如果要将其设置为0,则无法使用此方法(因为byte是内置的)。相反,您可以使
bytes
byte数组中的默认值是什么?all null\0?注意,它将值类型初始化为默认构造值,但如果它们是内置的,则不会。因此,在这种情况下,该方法是不可行的。但是,由于尚未提供初始值设定项(请参阅),因此在创建数组后它将被设置为0。通常,您可能不想使用此方法。从文件来看
“这种方法旨在帮助
编译器支持值类型数组;
大多数用户不需要此方法。它
不得在引用类型上使用
阵列。”
如果要将其设置为0,则无法使用此方法(因为byte
是内置的)。相反,您可以使用for循环或(如果性能很重要)类似的东西
C#永远不会让您读取未初始化的内存,除非是在不安全模式下。根据:
通过调用值类型的默认构造函数来初始化值类型数组的每个元素
因此,在本例中,您可能认为它调用了类型为byte
的默认构造函数,其结果将是一个填充0
s的数组
(显示默认构造函数返回的值类型的默认值。)
然而,在同一页上有以下注意事项:
只能对具有构造函数的值类型使用此方法;但是,C#固有的值类型没有构造函数
这意味着在这种情况下,它什么也不做,因为byte
是C#固有的值类型,因此没有构造函数。它没有效果
byte[] bytes = new byte[100];
bytes.Initialize();
将打印4。初始化的效果不是(可能更合理)返回
default(T)
,而是调用newt()
。如果这不起作用,它会自动失败。默认构造函数与default(T)
不同,因此您链接到的文档与您所说的不一致。您的“注意事项”指出您上面所说的是错误的。@Jon-谢谢,我知道这件事让我很困扰!Quote:“您只能在具有构造函数的值类型上使用此方法;但是,C#本机的值类型没有构造函数。”我只知道C++/CLI是一种支持此类值类型的语言。C#支持具有默认构造函数的值类型,但只允许您显式设置其他构造函数,默认值只能是默认的类型(我想是“默认构造函数…”)
byte[] test = new byte[100];
test[1] = 4;
test.Initialize();
Console.WriteLine(test[1]);