我不知道如何解释我的问题,请以示例形式接受:
我用C#语言编写了一个库,其方法如下:
public object GetValueAt(int idx) {
return arr[idx];
}
然后我在VB.Net中使用它,当然在C#和VB.Net之间有一个不同的索引。因此,如果我用idx = 6
调用该方法,CLR如何知道我尝试访问的对象(它在C#上有idx = 5
)?
这只是我的例子,那么.Net中现有的库怎么样?
答案 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 :(得分:3)
如果您使用idx = 6
从VB调用该方法,它将返回arr[6]
将arr
视为基于0(即第七个元素),因为代码是用C#编写的。不应用自动变基,因为您只是从VB调用方法。
我思考当数组索引表达式本身在VB中时,VB编译器会自动调整数组索引,但这不是这里的情况 - 它只是一个方法调用。 编辑:看起来不会发生这种情况,至少并非总是如此。编译器在创建数组时允许,但没有索引到它们中,显然......
编辑:请点击MSDN "Arrays In Visual Basic"页面,其中显示了一个示例并说明:
前面示例中的数组学生包含7个元素。元素的索引范围从0到6.
正如许多长期的Web开发人员所知,Visual Basic和VB Script过去常常使用基于1的数组,而我使用的几乎所有其他语言--C,C ++,JScript,JavaScript - 都有0-基于数组。我并没有特别强烈偏爱一个,但是当你从一个转换到另一个时调整你的想法很棘手。
然后当.Net发布时,Visual Basic改为使用基于0的数组。