C#:基于非零的数组不符合CLS

And*_*ech 10 c# arrays cls-compliant

我现在正在阅读AlbahariC#3.0 in a Nutshell and pg.241,在谈论阵列索引时,他说:

基于非零的数组不符合CLS(公共语言规范)

对于非零数组不符合CLS,这究竟意味着什么?它对你的代码有什么影响?

[更新]

是该书页面的链接.

And*_*are 27

CLS(公共语言规范)为一组通用规则奠定了基础,这些规则保证其他语言(VB.NET,F#等)可以使用您使用C#构建的程序集.基于非零的数组不符合要求,因为其他语言希望数组从零开始.

这是一个更容易理解的示例:

class Foo
{
    public void Bar() { }
    public void bar() { } 
}
Run Code Online (Sandbox Code Playgroud)

此类型符合CLS,因为它包含两个仅按类型名称不同的成员.使用VB.NET的人如何消除歧义Bar,bar因为VB.NET编译器不区分大小写?

因此,基本上CLS是一系列这样的规则来保证语言之间的互操作性.


Jon*_*eet 12

CLS合规性主要是为了确保您的代码与其他语言尽可能广泛兼容.它包括不公开公共成员的事情,这些公共成员只有大小写(这会混淆VB,这是不区分大小写的).有关更多信息,请参阅此MSDN文章以及通用语言规范本身.