C# 之不安全代码(2)
2009-06-11 08:31:51 来源:WEB开发网打印结果取决于endian。
指针数组
在不安全上下文中,是允许指针数组的,只有几种用于其转换是允许的:
l 从任何数组类型到System.Array或是实现了其接口的隐式引用类型转换同样适用于指针数组。但是,任何试图通过System.Array或是实现了其接口访问数组元素都会引发一个 运行时错误,因为指针类型不能转化为object。
l 从一个一维数组类型S[]到System.Collections.Generic.IList<T>或是到其基接口,任何显示或是隐式的转换都是不行的。因为指针类型不能被用作类型参数,还有没有从指针类型到非指针类型的转换。
l 从System.Array或是实现了其接口到任何数组类型显示引用转换适用于指针数组。
l 从System.Collections.Generic.IList<T>或是到其基接口到一个一维数组类型T[],任何显示的转换都是不行的。原因同上面第2条。
还有就是对于foreach语句,不适用于指针数组。相反,下面的语句
foreach (V v in x) embedded-statement
中的x是一个数组类型T[,,…,],n是数组的维度减1,T和V是指针类型,被改写为:
{
T[,,…,] a = x;
V v;
for (int i0 = a.GetLowerBound(0); i0 <= a.GetUpperBound(0); i0++)
for (int i1 = a.GetLowerBound(1); i1 <= a.GetUpperBound(1); i1++)
…
for (int in = a.GetLowerBound(n); in <= a.GetUpperBound(n); in++) {
v = (V)a.GetValue(i0,i1,…,in);
embedded-statement
}
}
更多精彩
赞助商链接