私は現在、Albahariの C# 3.0 を一言で言えばpg で読んでいます。241 で、配列のインデックス作成について話しているときに、彼は次のように述べています。
非ゼロベースの配列は CLS (Common Language Specification) に準拠していません
ゼロ以外の配列がCLSに準拠していないということは、正確にはどういう意味ですか? また、コードにどのような影響がありますか?
[アップデート]
本のページへのリンクはこちらです。
CLS (Common Language Specification) は、C# でビルドしたアセンブリを他の言語 (VB.NET、F# など) で使用できることを保証する、準拠のための共通のルール セットの基礎を築きます。他の言語は配列がゼロベースであることを期待しているため、ゼロベースでない配列は準拠していません。
理解しやすい例を次に示します。
class Foo
{
public void Bar() { }
public void bar() { }
}
この型は、名前だけが異なる 2 つのメンバーを含むため、CLS に準拠していません。VB.NETコンパイラは大文字と小文字を区別しないため、VB.NETBar
を使用している人はどのようにして と を区別しますか?bar
基本的に、CLS は、言語間の相互運用性を保証するための、このような規則の集まりです。
言われていることに加えて、ゼロベースでない配列は、既存の VB6 コードの移行を (主に自動移行ツールによって) 容易にするためだけに存在します。VB6 では、配列のインデックス付けは必ずしもゼロではなく、任意の数から開始できるからです。
CLS 準拠の問題 (およびその他の考慮事項) により、.NET でそれらを使用することはお勧めしません (VB.NET をプログラミングする場合でも)。さらに、それらの使用はかなり制限されています。配列をクラス内にカプセル化し、適切なインデックス アクセス演算子を記述してオフセット変換を行う方が簡単です。