假设我们声明了一个大小为 3 的 Person 类型的数组:
Person[] arr = new Person[3];
在那之后,为什么我还要做:
arr[i] = new Person();
我以为 new Person[3] 在内存中创建了 3 个 person ,而 arr 会指向第一个。谢谢!
最佳答案
I thought new Person[3] creates 3 persons in memory, and arr will point to the first one.
不,它只是创建一个数组,可以存储对 3 个人的引用(假设Person
是一个类而不是一个结构)。毕竟,C# 如何知道究竟您想在其中存储什么?它可以是对 Person 的引用,它可以是空引用,它可以是对 Student(Person 的子类)的引用,......并且 Person
甚至可能没有构造函数参数!
简而言之,这:
Person[] arr = new Person[3];
创建这个:
+--------+--------+--------+
| null | null | null |
+--------+--------+--------+
现在您可以用值填充该数组,例如
var john = new Person("John Doe");
arr[0] = john;
arr[1] = john;
arr[2] = new Student("Mike", "Computer Science");
导致:
+--------+--------+--------+
| ref | ref | ref |
+--------+--------+--------+
| | |
| +--+ +------+
| | |
v v v
+-------------+ +------------+
| Person | | Student |
+-------------+ +------------+
| John Doe | | Mike |
+-------------+ | Comp.Sci. |
+------------+
关于C#对象类型数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67544480/