2011-08-17 19 views
1

我不知道該怎麼解釋我的問題調用,請接受它例如形式:如何CLR做的方法在C#,VB.Net,

我寫在C#語言的庫具有方法如下:

public object GetValueAt(int idx) { 
    return arr[idx]; 
} 

然後我用它在VB.Net着,當然還有基於C#和VB.Net之間指數向度。所以如果我用idx = 6調用該方法,CLR如何知道我嘗試訪問的對象(它在C#上有idx = 5)?

這只是我的例子,怎麼樣存在庫中的.Net?

+3

C#中的索引0 == VB.Net中的索引0。 – 2011-08-17 10:49:26

回答

3

如果您從VB調用該方法並使用idx = 6,它將返回arr[6]arr視爲基於0的(即第七個元素),因爲代碼是用C#編寫的。不應用自動重新綁定,因爲您只是從VB調用一個方法。

認爲 VB編譯器會自動調整數組索引當數組索引表達式本身在VB,但這裏並非如此 - 它只是一個方法調用。 編輯:看起來好像根本不會發生,至少並非總是如此。編譯器可以津貼時創建陣列,而不是索引放進去,顯然......

編輯:

數組學生:這與MSDN "Arrays In Visual Basic"網頁,其中顯示了一個例子,並解釋風鈴在前面的例子中包含7個元素。該元素的索引範圍從0到6

而且從this blog post

由於許多長期Web開發人員可以知道,Visual Basic和VB腳本曾經有基於1的數組多年以來,幾乎所有其他語言(C,C++,JScript,JavaScript)都使用了基於0的數組。我沒有特別強烈的偏好於另一個,但是當從一個切換到另一個時調整你的想法是棘手的。

隨後的.Net發佈時,Visual Basic中改爲使用基於陣列0。

6

我知道的,你可能會認爲有C#和VB.Net之間的分度差時聲明陣列的唯一區別。

在VB.Net,聲明所述陣列的上限

Dim x(10) as Int32 

聲明瞭11個元素的陣列,從0開始,在10處結束。在C#中,聲明長度陣列的

Int32 []x = new Int32[10]; 

聲明的陣列有10種元素,從0開始,在9結束。

索引訪問具有相同的索引值在兩種語言中工作相同。

+1

+1達米恩,現貨。這是一個真正的VB特質。 10是*上限*,而不是大小。 – 2013-09-24 06:32:52