質問

現在読んでいます アルバハリさんの C# 3.0 の概要 そしてページにあります。241 では、配列のインデックス作成について話しながら、次のように述べています。

非ゼロベースのアレイはCLS(共通言語仕様)ではありません。

ゼロ以外の配列が存在しないということは、正確には何を意味しますか? CLS準拠 ?そして、それはコードにどのような影響を及ぼしますか?

[アップデート]

ここ 書籍のページへのリンクです。

役に立ちましたか?

解決

CLS(共通言語仕様)は、他の言語(VB.NET、F#の、など)を使用すると、C#ので構築されているアセンブリを使用することができることを保証し、コンプライアンスのためのルールの共通セットのための基礎を築きます。他の言語は、配列がゼロベースであることが期待どおりに非ゼロベースのアレイが準拠していないであろう。

ここで理解しやすい例です。

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

このタイプは、のないのBE CLSに準拠し、それが唯一のタイプによって名前が異なる2つのメンバーを含むからです。 VB.NETコンパイラは大文字と小文字を区別しませんので、どのようにVB.NETを使用して誰かがBarbarの間で明確でしょうか?

そこで、基本的CLSは、言語間の相互運用性を保証するために、このようなルールの束である。

他のヒント

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

非ゼロベースのアレイはVB6で、配列のインデックスがゼロでない必ずしも、任意の番号から開始することができるので(主に自動移行ツールによって)既存のVB6のコードの移行を容易にするためにのみ存在し、言われているもの。 IまたP>

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

また、

あなたのアプリケーションは、他のプログラムで動作するように意図されていない場合 - それはあなたが他の人に公共のクラスライブラリとして販売しません自己完結型の単位であるのように、あまり心配しないでください。 一般的なクラスライブラリを開発する際に

しかし、ここでは他のコメントは正しいです。

常に[アセンブリ:CLSCompliant(真)]を使用することをお勧めしますが、それはあなたのアプリケーションの実行を得るために重要ではない。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top