我目前正在阅读 阿尔巴哈里C# 3.0 简而言之 并在第 12 页上。241,在谈论数组索引时,他这样说:

基于非零的数组不是CLS(常见语言规范) -

对于非零数组来说,这到底意味着什么 符合 CLS 标准 ?它对您的代码有什么影响?

[更新]

这里 是书页的链接。

有帮助吗?

解决方案

在CLS(公共语言规范)奠定了遵守一套共同的规则,保证了其他语言(VB.NET,F#等),可以使用您已经用C#内置组件的基础。作为其他语言期望阵列是基于零的基于非零阵列不会兼容。

下面是比较容易的例子来理解:

class Foo
{
    public void Bar() { }
    public void bar() { } 
}

此类型将的是CLS兼容,因为它包含仅由式以名称的差异的两个部件。人们如何使用VB.NET自VB.NET编译器Barbar间的歧义是不区分大小写?

所以基本上是CLS一堆这样的规则,以保证语言之间的互操作性。

其他提示

CLS 合规性主要是为了确保您的代码尽可能广泛地与其他语言兼容。它包括诸如不公开仅大小写不同的公共成员之类的内容(这会使 VB 感到困惑,因为它不区分大小写)。看到这个 MSDN 文章 欲了解更多信息,以及 通用语言规范 本身。

我除了什么已经说了,非零基于阵列单独存在,以缓解现有VB6代码(主要由自动迁移工具),因为在VB6过渡,数组索引可以从任意数目开始,不一定为零。

由于CLS遵从性问题(和其他因素),但不建议使用过他们的.NET(VB.NET编程即使)。此外,它们的使用是相当有限。它更容易只是通过封装类内部时,阵列和写入一个适当的索引访问运算符做偏移翻译。

此外,

如果您的应用程序不打算与其他程序协同工作 - 在它是一个独立的单元,你将不会出售作为公共类库给其他人,不要担心太多

但是,开发一个通用类库的时候,这里的其他意见是正确的。

它总是使用[大会:CLSCompliant(真)好的做法,但它是不是让你的应用程序运行的关键

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top