シェアードソース CLIのソースを眺めていて思った事。
「int は何から出来ているんだ?」
全く同様の事を議論している掲示板を過去に見た覚えがあるが(多分@IT)、失念してどこだか分からなくなってしまった。そもそも私には内容が全く理解できなかったが。
C# の int は System.Int32 のエイリアスだ。つまり、
int a;
は
System.Int32 a;
と書いているのと同じであるという事。
しかし、それだとどうにも納得できないのが、Int32 のソース。
なんと、Int32 は内部に自分自身を持っているのだ。
構造体は循環参照ができないはず。なのに、Int32 はやっちゃっている。
.NET の型は大きく分けて「値型」と「参照型」である。しかしやはり「組み込み型」というものが存在するのだろう。
IL は直接 int を操作できる命令がある。
つまり 「int = Int32」とはならないで、C# コンパイラは、「int = IL の組み込み int」と扱っている。
Int32 に定義されているメソッドを使用しようとしたとき初めて「int は Int32」として扱われる。
int a = 1;
Int32 a = 1;
ldc.i4.1
stloc.0
どちらも、同じ IL になるが、Int32 を使っているというのは微塵も感じれない。
次のようにしたときに初めて、Int32 が顔を出す。
string s = a.ToString();
call instance string [mscorlib]System.Int32::ToString()
結論。
「int は Int32 のエイリアス」
ではなく
「Int32 は 定義されているメソッドを使わない限り、int のエイリアスとして扱われる」
以上、完全に推測です。更に追求中・・・。