C# 7.0 核心技术指南 (33):C#语言基础 2.7.1

阅读数:8 2019 年 11 月 30 日 23:44

C# 7.0核心技术指南(33):C#语言基础 2.7.1

(默认数组元素初始化)

内容简介
本书前三章将集中介绍 C#语言。首先介绍基本的语法、类型和变量。而后会介绍一些高级的特性,如不安全代码以及预处理指令。如果你是 C#语言的初学者,请循序渐进地阅读这些章节。
其余各章则涵盖了.NET Framework 的核心功能,包括 LINQ、XML、集合、并发、I/O 和网络、内存管理、反射、动态编程、特性、安全、应用程序域和原生互操作性等主题。第 6 章和第 7 章是后续主题的基础,除这两章之外,其余各章可以按照需要以任何顺序阅读。LINQ 相关的三个章节好按顺序阅读。其中的一些章节需要一些并发相关的知识,这些知识将在第 14 章中介绍。

创建数组时其元素总会用默认值初始化。类型的默认值是按位取 0 的内存表示的值。例如,若定义一个整数数组,由于 int 是值类型,因此该操作会在连续的内存块中分配 1000 个整数。每一个元素的默认值都是 0:

复制代码
int[] a = new int[1000];
Console.Write (a[123]); // 0

值类型和引用类型的区别

数组元素的类型是值类型还是引用类型对其性能有重要的影响。若元素类型是值类型,每个元素的值将作为数组的一部分进行分配,例如:

复制代码
public struct Point { public int X, Y; }
...
Point[] a = new Point[1000];
int x = a[500].X; // 0

若 Point 是类,创建数组则仅仅分配了 1000 个空引用:

复制代码
public class Point { public int X, Y; }
...
Point[] a = new Point[1000];
int x = a[500].X; // Runtime error, NullReferenceException

为避免这个错误,我们必须在实例化数组之后显式实例化 1000 个 Point 实例:

复制代码
Point[] a = new Point[1000];
for (int i = 0; i < a.Length; i++) // Iterate i from 0 to 999
a[i] = new Point(); // Set array element i with new point

不论元素是何种类型,数组本身总是引用类型对象。例如,下面的语句是合法的:

复制代码
int[] a = null;

C# 7.0核心技术指南(33):C#语言基础 2.7.1

购书地址 https://item.jd.com/12681788.html?dist=jd

评论

发布