13,226
回編集
編集の要約なし |
|||
| 83行目: | 83行目: | ||
} | } | ||
</source> | </source> | ||
<br><br> | |||
== StructLayout属性 == | |||
StructLayout属性とは、クラスまたは構造体のデータメンバを、メモリ内でどのように配置するかを表す。<br> | |||
<source lang="csharp"> | |||
[ StructLayout( LayoutKind列挙 ) ] | |||
</source> | |||
<br> | |||
下表に、LayoutKind列挙子を示す。<br> | |||
<center> | |||
{| class="wikitable" | |||
|- | |||
! LayoutKind列挙子 !! 説明 | |||
|- | |||
| Sequential || 宣言される順番に従って並べる。 | |||
|- | |||
| Explicit || <code>FieldOffsetAttribute</code>で独自のオフセットを指定して並べる。 | |||
|- | |||
| Auto || 適切なレイアウトで並べる。<br>(これを指定すると、マネージドコード外からアクセスできない) | |||
|} | |||
</center> | |||
<br> | |||
下表に、StructLayout属性のパラメータを示す。<br> | |||
<center> | |||
{| class="wikitable" | |||
|- | |||
! StructLayout属性のパラメータ !! 説明 !! 既定値 | |||
|- | |||
| Pack || パックサイズを指定するint値である。<br>指定可能な値は、1、2、4、8、16のいずれかである。 || 8 | |||
|- | |||
| CharSet || 文字列のマーシャリング方法を示すCharSet列挙である。 || CharSet.Auto | |||
|- | |||
| Size || 構造体またはクラスのサイズを指定する。 || | |||
|} | |||
</center> | |||
<br> | |||
<source lang="csharp"> | |||
[StructLayout( LayoutKind.Sequential )] | |||
public struct Position | |||
{ | |||
public double x; | |||
public double y; | |||
public double z; | |||
} | |||
</source> | |||
<br><br> | |||
== CLSCompliant属性 == | |||
CLSCompliant属性は、CLSへの準拠を検証するかどうかをコンパイラに指示する。<br> | |||
<br> | |||
外部から参照できない型やメンバに対しては、この属性を指定する必要は無い。<br> | |||
指定する場合、<code>このアセンブリの外から認識できないため、CLS準拠の確認は '型' で実行されません</code>と警告が表示される。<br> | |||
<source lang="csharp"> | |||
[CLSCompliant( false )] | |||
public int SetValue( UInt32 value ); | |||
</source> | |||
<br> | |||
<u>※注意</u><br> | |||
<u>上記の例では、UInt32型はCLSに準拠しないため、<code>CLSCompliant(false)</code>と指定する必要がある。</u><br> | |||
<br><br> | <br><br> | ||