程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C# 4.0中泛型協變性和逆變性詳解(3)

C# 4.0中泛型協變性和逆變性詳解(3)

編輯:關於C語言

數組

作為參數使用的時候,數組時而可變時而不可變。和典型集合一樣,數組具有非安全的協變性。首先,只有包含了參考類型的數組可以被視為具有協變性或逆變性。值類型的數組通常不可變,即便是調用一個期望對象數組的方法時也是如此。這一方法可以與其他任何參考類型的數組一起調用,但是你不能向其發送整數數組或其他數值類型:

private void PrintCollection(object[] collection)
{

foreach (object o in collection)

Console.WriteLine(o);

}

只要你限制引用類型,數組就會具有協變性和逆變性。但是仍然是不安全的。你將數組視為可變或逆變的次數越多,越會發現你需要處理ArrayTypeMismatchException。讓我們檢查其中的一些方法。數組參數是可變的,但卻是非安全協變。檢查下列不安全的方法:

private class B 
{

public override string ToString()

{

return "This is a B";

}

}

private class D : B

{

public override string ToString()

{

return "This is a D";

}

}

private class D2 : B

{

public override string ToString()

{

return "This is a D2";

}

}

private void DestroyCollection(B[] storage)

{

try

{

for (int index = 0; index < storage.Length; index++)

storage[index] = new D2();

}

catch (ArrayTypeMismatchException)

{

Console.WriteLine("ArrayTypeMismatch");

}

}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved