gpt4 book ai didi

.net - U[] 是如何转换为 T[] 的?

转载 作者:行者123 更新时间:2023-12-04 14:06:38 26 4
gpt4 key购买 nike

很明显T[]数组类型不是 covariant作为 T[] 的元素可以通过索引设置。

然而,一个 U[]可以转换为 T[]只要U,编译器没有任何提示源自 T .

Man[] men = new[] { new Man("Aaron"), new Man("Billy"), new Man("Charlie") };
Person[] people = (Person[])men;

在上面的代码中,出现 menpeople似乎确实引用了相同的 Array目的。设置效果 men[0] = new Man("Aidan")可以在 people[0] 看到.同样尝试 people[0] = new Woman("Debbie")结果是 ArrayTypeMismatchException在运行时*。

这是否意味着 T[] type 实际上对每个 set 执行类型检查称呼?如果允许以这种方式转换数组,这似乎是必要的。

我想我的问题只是: 这怎么可能? 我很清楚 U[]并非源自 T[] .我也不清楚我是否可以定义我自己的以这种方式工作的类型:实际上是不变的,但行为是协变的。

*尽管 CLR 显然允许数组变化,但任何语言都可能禁止在数组类型之间进行转换。但是,这种行为在 VB.NET 中似乎是相同的:
Dim men = New Man() { New Man("Aaron"), New Man("Billy"), New Man("Charlie") }
Dim people = CType(men, Person())

最佳答案

这是数组的一种特殊行为,不能以任何其他类型复制。

It is generally regarded as a mistake .

关于.net - U[] 是如何转换为 T[] 的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3611422/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com