10

私は現在、AlbahariC# 3.0 を一言で言えばpg で読んでいます。241 で、配列のインデックス作成について話しているときに、彼は次のように述べています。

非ゼロベースの配列は CLS (Common Language Specification) に準拠していません

ゼロ以外の配列がCLSに準拠していないということは、正確にはどういう意味ですか? また、コードにどのような影響がありますか?

[アップデート]

本のページへのリンクはこちらです。

4

4 に答える 4

28

CLS (Common Language Specification) は、C# でビルドしたアセンブリを他の言語 (VB.NET、F# など) で使用できることを保証する、準拠のための共通のルール セットの基礎を築きます。他の言語は配列がゼロベースであることを期待しているため、ゼロベースでない配列は準拠していません。

理解しやすい例を次に示します。

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

この型は、名前だけが異なる 2 つのメンバーを含むため、CLS に準拠していません。VB.NETコンパイラは大文字と小文字を区別しないため、VB.NETBarを使用している人はどのようにして と を区別しますか?bar

基本的に、CLS は、言語間の相互運用性を保証するための、このような規則の集まりです。

于 2009-06-05T13:07:16.790 に答える
12

CLS への準拠とは、主に、コードが他の言語と可能な限り広く互換性があることを確認することです。これには、大文字と小文字だけが異なるパブリック メンバーを公開しないことなどが含まれます (大文字と小文字を区別しない VB を混乱させる可能性があります)。詳細については、このMSDN の記事と、共通言語仕様自体を参照してください。

于 2009-06-05T13:07:30.067 に答える
2

言われていることに加えて、ゼロベースでない配列は、既存の VB6 コードの移行を (主に自動移行ツールによって) 容易にするためだけに存在します。VB6 では、配列のインデックス付けは必ずしもゼロではなく、任意の数から開始できるからです。

CLS 準拠の問題 (およびその他の考慮事項) により、.NET でそれらを使用することはお勧めしません (VB.NET をプログラミングする場合でも)。さらに、それらの使用はかなり制限されています。配列をクラス内にカプセル化し、適切なインデックス アクセス演算子を記述してオフセット変換を行う方が簡単です。

于 2009-06-05T15:12:56.367 に答える