WEB开发网
开发学院软件开发C语言 C# 4.0中泛型协变性和逆变性详解 阅读

C# 4.0中泛型协变性和逆变性详解

 2009-06-04 08:30:21 来源:WEB开发网   
核心提示: privatevoidUnsafeUse(ArrayListstuff){for(intindex=0;index<stuff.Count;index++)stuff[index]=stuff[index].ToString();}这是对保存在集合中的作出的更深一层的假设,当方法存在

private void UnsafeUse(ArrayList stuff) 
{

for (int index = 0; index < stuff.Count; index++)

stuff[index] = stuff[index].ToString();

}

这是对保存在集合中的作出的更深一层的假设。当方法存在时候,集合包含了类型字符串的对象。或许这不再是原始集合中的类型。事实上,如果原始集合包含这些字符串,那么方法就不会产生效果。否则,它会将集合转换为不同的类型。下列使用实例显示了在调用方法的时候遇到的各种问题。此处,一列数字被发送到了UnsafeUse,而数字正是在此处被转换成了字符串的数组列表。调用以后,呼叫代码会尝试再一次创建能够导致InvalidCastException的项目。

 // usage: 
public void DoTest()

{

ArrayList collection = new ArrayList()

{

1,2,3,4,5,6,7, 8, 9, 10,

11,12,13,14,15,16,17,18,19,20,

21,22,23,24,25,26,27,28,29,30

};

SafeCovariance(collection);

// create the sum:

int sum = 0;

foreach (int num in collection)

sum += num;

Console.WriteLine(sum);

UnsafeUse(collection);

// create the sum:

sum = 0;

try

{

foreach (int num in collection)

sum += num;

Console.WriteLine(sum);

}

catch (InvalidCastException)

{

Console.WriteLine(

"Not safely covariant");

}

}

上一页  1 2 3 4 5  下一页

Tags:变性 逆变 详解

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接