じゃあ、C++のclassって、C#で言うと何なのさ?
多分、以下はほぼ無意味。異言語だし、たとえて言えばC++のclassって、Cの何なのさ?って意味くらい間違ってる。*1けど、自分の理解のために敢えて書く(w
前振りはその辺にして、、、こんな風になるかなと思う。*2
言語 | キーワード | スタックに取れるか | ヒープに取れるか | 継承できるか | デフォルトコンストラクタ*3を作成できるか | "="にしたときの意味*4 |
---|---|---|---|---|---|---|
C++ | class | ○ | ○ | ○ | ○ | Op=に依存 |
C++ | struct | ○ | ○ | ○ | ○ | Op=に依存 |
C# | class | × | ○ | ○ | ○*5 | 変数は常に、参照型なので参照先がコピーされるだけ。 |
C# | struct | ○ | △*6 | × | ×*7 | 変数は常に値型*8なので、メンバの中身がコピーされる。 |
見ればわかるとおり、C#のclassはどこまで行っても、自由領域に取られるべきモノであり、変数は常に作成されたインスタンスへの参照となる。C#のstructはどこまで行っても変数そのものが値をさすモノであり、どこまで行っても実体である*9
と言うことで、以下は夜にまた。。。