数组协方差
具备直接或间接基类 B 的特定引用类 D,数组类型 D 可分配给类型 B 的数组变量。
// clr_array_covariance.cpp
// compile with: /clr
using namespace System;
int main() {
// String derives from Object
array<Object^>^ oa = gcnew array<String^>(20);
}
备注
对数组的元素的分配与数组的动态类型的分配兼容。 对数组的元素将具有的类型不兼容 System::ArrayTypeMismatchException 将导致引发。
"数组协方差"不适用于某些值类类型的数组。 例如,Int32 数组无法转换为 Object^ 数组,使用装箱技术也不行。
示例
// clr_array_covariance2.cpp
// compile with: /clr
using namespace System;
ref struct Base { int i; };
ref struct Derived : Base {};
ref struct Derived2 : Base {};
ref struct Derived3 : Derived {};
ref struct Other { short s; };
int main() {
// Derived* d[] = new Derived*[100];
array<Derived^> ^ d = gcnew array<Derived^>(100);
// ok by array covariance
array<Base ^> ^ b = d;
// invalid
// b[0] = new Other;
// error (runtime exception)
// b[1] = gcnew Derived2;
// error (runtime exception),
// must be "at least" a Derived.
// b[0] = gcnew Base;
b[1] = gcnew Derived;
b[0] = gcnew Derived3;
}