構造体
C++の構造体とクラスはデフォルトのアクセスレベルが違うだけで、それ以外は全く同じだが、C#の構造体とクラスはかなりの違いがある。
class | struct | |
---|---|---|
格納場所 | ヒープ | スタック*1 |
継承 | 可 | 不可*2 *3 |
メンバの制限 | なし | あり*4 |
フィールドの宣言箇所での初期化 | 可能 | 不可能 |
コレクションとの相性 | 良い | 悪い*5 |
また、ボックス化解除は明示的に行わなければならないのに、ボックス化は何も考えずにできるから思わぬところでボックス化が起こったりする点も注意が必要。
int i = 0; // ここで勝手にボックス化 Console.WriteLine("{0}", i); // 勝手にボックス化されないように明示的にToStringで文字列に Console.WriteLine("{0}", i.ToString()); // むしろこの例だったらこれでOK Console.WriteLine(i.ToString());