CTS 型
構造体とエイリアス
実は、私たちは知らないうちに .NET ライブラリの構造体を使用していた
この構造体は、.NET 開発環境となるあらゆる言語が使用できるようになっている
C# はこれを構造体と意識せずに値型として利用できる仕組みを持っている
そう、実は int とか char というのは、CTS が定義している構造体なのです
C# は、これらを構造体のエイリアス(alies : 別名)として定義しているのです
その関係は、次のように構成されています
構造体 | C# エイリアス
|
---|
System.Object | Object
|
System.String | string
|
System.Char | char
|
System.SByte | sbyte
|
System.Byte | byte
|
System.Int16 | short
|
System.UInt16 | ushort
|
System.Int32 | int
|
System.UInt32 | uint
|
System.Int64 | long
|
System.Int64 | ulong
|
System.Single | float
|
System.Double | double
|
System.Boolean | bool
|
System.Decimal | decimal
|
これまでのようにエイリアスを使うか、構造体を使うかは好みの問題です
この事実がわかれば、プリミティブな値型変数もボクシング可能であり
.NET テクノロジが強力な型の一貫性を持っていることがわかりますね
class Test {
static void Main() {
System.Int32 i = 10;
System.Object obj = i;
GetInt32(obj);
}
static void GetInt32(System.Object obj) {
System.Console.WriteLine((System.Int32)obj);
}
}
このプログラムでは、エイリアスである int の代わりに System.Int32 を使っています
これがボクシングされ、GetInt32() メソッドに渡されています
System.Int32 を int に替えてコンパイルしても意味はまったく同じです