詳細を説明すると、C# の値型はコンパイラ/CLR によって非常に特別に扱われます。ただし、CLR 内部の型はさらに特別に扱われます。これが私が意味することです:
int a = 5;
int b = 10;
int с = a + b;
a.CompareTo(b);
Visual Studio でマウスをホバーするとint
、実際にSystem.Int32
構造体であることがわかります。それで大丈夫です。これで、ILDasm を取得して内容を調べることができます。これはSystem.Int32
、タイプのフィールドが 1 つある非常に単純な構造体でありint32
(これはint32
CLR の内部にあります)、加算用のオーバーロードされた演算子がないことがわかります。
それで、これはどのようにint с = a + b
機能しますか?再び ILDasm をつかみ、IL を調べます。System.Int32
IL コードには がないことが判明しました。コンパイラは、それを に置き換える必要があることを自動的に理解しint32
ます。そして、スタック上のadd
カップルで機能するIL命令があります。int32
さらに面白いことに、CLR ではSystem.Int32
onのインスタンス メソッドを呼び出すことができますint32
。私には黒魔術のように見えます。
ここで、純粋な理論的な質問に進みます。これSystem.Int32
は他の型と同じように見えますが、C# で何らかの方法で作成できますか? 可能であれば、それを使って何か役に立つことはありますか (実際のint32
フィールドは非公開です)。
編集:わかりました、もう少し明確にするために:この質問はint
へのエイリアスであることについて何もありませんSystem.Int32
。提供された例を使用して、例の後の最初の段落を置き換えint
てSystem.Int32
スキップすることができます。本当の問題はvaluetype [mscorlib]System.Int32 a
、単にint32 a
.