我有以下方法.NET爲什麼不能從int []轉換爲對象[]
private void AM(object[] x)
{
}
當我們這樣稱呼它:
int[] x = new int[1];
AM(x);
我們得到一個編譯錯誤,像「無效參數」,「不能從int []轉換爲object []」。但是,如果我們有一個參數(對象y),我們可以將輸入int作爲輸入參數。
我的問題是:爲什麼微軟以不同的方式設計它們?
我有以下方法.NET爲什麼不能從int []轉換爲對象[]
private void AM(object[] x)
{
}
當我們這樣稱呼它:
int[] x = new int[1];
AM(x);
我們得到一個編譯錯誤,像「無效參數」,「不能從int []轉換爲object []」。但是,如果我們有一個參數(對象y),我們可以將輸入int作爲輸入參數。
我的問題是:爲什麼微軟以不同的方式設計它們?
當傳遞一個int
(值類型)與一個object
(引用類型)參數的方法,是在堆和int
的值創建新的對象被複制到其中。然後將該對象(盒裝的int
)的引用傳遞給方法參數。
int[]
和object[]
都是數組,但它們具有非常不同的元素類型。作爲數組,它們都是引用類型,因此採用object[]
參數的方法需要引用一組對象。對一系列整數的引用是非常不同的。
由於int
是值類型,有轉向int[]
基準成參考object[]
不遍歷整個int[]
和拳擊各元件沒有簡單的方法。就時間和內存而言,這可能是一項昂貴的操作,編譯器不會自動爲您執行。
與int數組相比,一個對象數組是完全不同的動物(正如您可以看到的那樣)。但是,object []和int []都是對象,因此您可以將它們都轉換爲它們的原型類型(如在基元中),它是對象。
只有引用類型的數組可以被分配給其他引用類型的數組(如Object)。由於int是一個值類型,所以你不能這樣做。
這被稱爲Array Covariance
陣列協方差特別不延伸到 值類型的陣列。例如,不存在允許將int [] 視爲對象[]的轉換。
爲什麼你這樣做了原型函數?這是你寫的東西,可以改變嗎? – 2012-07-27 03:30:09