C#と諸々

C#がメインで他もまぁ諸々なブログです
おかしなこと書いてたら指摘してくれると嬉しいです(´・∀・`)
つーかコメント欲しい(´・ω・`)

--/--/-- --:--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
タグ:
トラックバック(-) | コメント(-) | このエントリーを含むはてなブックマーク
2006/09/28 20:04
.NET Frameworkの上で動く言語は、C#、VB.NET、C++/CLI、J#、Delphi.NETなどなど、多数ある。
これらは全て、MSILと呼ばれる中間コードへとコンパイルされる。

MSILへコンパイルされたアセンブリは、他の.NET言語から簡単に利用できる。
しかし、ある言語では実装されているが、ある言語では実装されていない機能がある。例えばC++やC#の「ポインタ」は、VB.NETでは利用できない。


全ての.NET言語がサポートしなければならない仕様を共通言語仕様(CLS)と呼ぶ。
CLSは、外部に公開する部分にだけ適用される。つまり、メソッド内の処理コードなどには関係ない。
先程挙げた「ポインタ」は、CLSに定義されていないため、実装されている言語とされていない言語が存在する。

クラスライブラリで公開しているクラスのメンバに、ポインタを返すメソッドがあったとする。ポインタはCLSに定義されていないため、このメソッドは、CLSに準拠していないメンバとなる。当然VB.NETからこのメンバを利用することはできない。

クラスライブラリを開発する際に、開発言語とは異なる言語からの利用が想定される場合、クラスライブラリをCLS準拠にする必要がある。

CLSに準拠させるには、当然、公開する箇所がCLSの規定に従っている必要がある。ただし、それだけではなく、CLS準拠であることを明示的に示さなければならない。

CLS準拠であることを明示的に示すには、CLSCompliantAttributeを用いる。
CLSCompliantAttributeは、アセンブリ、型、メンバに対して有効であり、アセンブリに対して(通常、AssemblyInfo.csに)
[assembly: System.CLSCompliant(true)]
を付加することで、アセンブリに含まれる全ての型、メンバがCLS準拠であると示したことになる。
CLS非準拠な型やメンバが含まれている場合は、個別に
[System.CLSCompliant(false)]
を付加することで、部分的にCLS非準拠を示せる。


なお、.NET Frameworkの主要クラスライブラリであるmscorlibも、ほとんどの型はCLSに準拠しているが、UInt32構造体など、一部CLSに準拠していない型が含まれている。

[ 追記 ]
実の所、CLSCompliant属性を付けることによる利点がいまいちわからなかったり・・・(・∀・;)
別に付けなくても、C#のアセンブリをVBから利用することできるよなぁ・・・。
全ての型がCLS準拠じゃないことになって、その型を継承したり、引数の型にしたりすると、そいつもCLS非準拠になっちゃうけど、結局それで何が困るんだかわかんないや。
タグ: .NET CLS











トラックバックURL↓
http://csharper.blog57.fc2.com/tb.php/29-be04dbe2

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。