For any two reference-types A and B, if an implicit reference conversion (§1
3.1.4) or explicit reference
conversion (§13.2.3) exists from A to B, then the same reference conversion
also exists from the array type
A[R] to the array type B[R], where R is any given rank-specifier (but the
same for both array types). This
relationship is known as array covariance. Array covariance, in particular,
means that a value of an array
type A[R] may actually be a reference to an instance of an array type B[R],
provided an implicit reference
conversion exists from B to A.
Because of array covariance, assignments to elements of reference type
arrays include a run-time check
which ensures that the value being assigned to the array element is
actually of a permitted type (§14.13.1).
[Example: For example:
class Test
{
static void Fill(object[] array, int index, int count, object value) {
for (int i = index; i < index + count; i++) array[i] = value;
}
static void Main() {
string[] strings = new string[100];
Fill(strings, 0, 100, "Undefined");
Fill(strings, 0, 10, null);
Fill(strings, 90, 10, 0);
}
}
Chapter 19 Arrays
277
The assignment to array[i] in the Fill method implicitly includes a
run-time check, which ensures that
the object referenced by value is either null or an instance of a type that
is compatible with the actual
element type of array. In Main, the first two invocations of Fill succeed,
but the third invocation causes a
System.ArrayTypeMismatchException to be thrown upon executing the first
assignment to
array[i]. The exception occurs because a boxed int cannot be stored in a
string array. end example]
Array covariance specifically does not extend to arrays of value-types. For
example, no conversion exists
that permits an int[] to be treated as an object[].
3.1.4) or explicit reference
conversion (§13.2.3) exists from A to B, then the same reference conversion
also exists from the array type
A[R] to the array type B[R], where R is any given rank-specifier (but the
same for both array types). This
relationship is known as array covariance. Array covariance, in particular,
means that a value of an array
type A[R] may actually be a reference to an instance of an array type B[R],
provided an implicit reference
conversion exists from B to A.
Because of array covariance, assignments to elements of reference type
arrays include a run-time check
which ensures that the value being assigned to the array element is
actually of a permitted type (§14.13.1).
[Example: For example:
class Test
{
static void Fill(object[] array, int index, int count, object value) {
for (int i = index; i < index + count; i++) array[i] = value;
}
static void Main() {
string[] strings = new string[100];
Fill(strings, 0, 100, "Undefined");
Fill(strings, 0, 10, null);
Fill(strings, 90, 10, 0);
}
}
Chapter 19 Arrays
277
The assignment to array[i] in the Fill method implicitly includes a
run-time check, which ensures that
the object referenced by value is either null or an instance of a type that
is compatible with the actual
element type of array. In Main, the first two invocations of Fill succeed,
but the third invocation causes a
System.ArrayTypeMismatchException to be thrown upon executing the first
assignment to
array[i]. The exception occurs because a boxed int cannot be stored in a
string array. end example]
Array covariance specifically does not extend to arrays of value-types. For
example, no conversion exists
that permits an int[] to be treated as an object[].
本文探讨了在特定编程语言中数组协变性的概念及其工作原理。数组协变性允许某个数组类型可能实际上是指向另一种类型的数组实例的引用。文章通过实例说明了如何在运行时检查元素赋值,并解释了为何数组协变不适用于值类型数组。
586

被折叠的 条评论
为什么被折叠?



