C#对象类型数组

标签 c# arrays

假设我们声明了一个大小为 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/

相关文章:

c++ - 为什么我需要两次使用这个语句 - 矩阵乘法

javascript - Laravel 验证数组迭代

PHP/Laravel - 从两个简单数组或结合这两个数组的关联数组创建一个对象数组

c# - 如何为未经检查的语句创建表达式树语句

javascript - 如何检查数组对象的属性是否与另一个对象数组中的值之一匹配

c# - 计算包含 Unicode 字符的字符串的长度

c# - IIS调试在Windows 2012服务器IIS 8.0

c - 相同的代码在 C 中给出不同的输出

c# - 如何在强制 JSON 序列化中存在 "false" bool 值的同时省略过时的字段?

C# - 1 2 4 8 16 32 64...系列 - 根据输入数字、递归函数查找索引?