C#:非ゼロベースの配列は CLS に準拠していません
-
11-09-2019 - |
質問
現在読んでいます アルバハリさんの 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を使用して誰かがBar
とbar
の間で明確でしょうか?
そこで、基本的CLSは、言語間の相互運用性を保証するために、このようなルールの束である。
他のヒント
IまたP>
によりCLS準拠の問題(およびその他の考慮事項)に、(VB.NETの書き込みでも)これまでの.NETでそれらを使用することをお勧めしません。さらに、その使用はかなり制限されています。それはちょうど、クラス内の配列をカプセル化し、適切なインデックスアクセス演算子を書き込むことにより、オフセット変換を行うために簡単です。
また、
あなたのアプリケーションは、他のプログラムで動作するように意図されていない場合 - それはあなたが他の人に公共のクラスライブラリとして販売しません自己完結型の単位であるのように、あまり心配しないでください。
一般的なクラスライブラリを開発する際にしかし、ここでは他のコメントは正しいです。
常に[アセンブリ:CLSCompliant(真)]を使用することをお勧めしますが、それはあなたのアプリケーションの実行を得るために重要ではない。
。