CLR如何通过C#,VB.Net中的方法调用,

时间:2011-08-17 10:45:42

标签: .net clr

我不知道如何解释我的问题,请以示例形式接受:

我用C#语言编写了一个库,其方法如下:

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

然后我在VB.Net中使用它,当然在C#和VB.Net之间有一个不同的索引。因此,如果我用idx = 6调用该方法,CLR如何知道我尝试访问的对象(它在C#上有idx = 5)?

这只是我的例子,那么.Net中现有的库怎么样?

2 个答案:

答案 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.

来自this blog post

  

正如许多长期的Web开发人员所知,Visual Basic和VB Script过去常常使用基于1的数组,而我使用的几乎所有其他语言--C,C ++,JScript,JavaScript - 都有0-基于数组。我并没有特别强烈偏爱一个,但是当你从一个转换到另一个时调整你的想法很棘手。

     

然后当.Net发布时,Visual Basic改为使用基于0的数组。