じゃあ、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

と言うことで、以下は夜にまた。。。

*1:とはいえ、無茶な言い方すれば、structの発展とも言えなくもない。ていうか、元々はそこから出発してたはずだし

*2:C#の場合、属性でねじ曲げてない限り。。。てーかねじ曲げること出来るかどーかは不明

*3:引数無しコンストラク

*4:暗黙であれ、明示的であれ型変換が伴わない場合に限定

*5:というか、デフォルトコンストラクタと言う概念自体、C++と若干違う

*6:クラスのメンバとした場合、又はobjectとして渡す場合などは、勝手にBoxingされる

*7:常にデフォルトコンストラクタを使わなければならい

*8:Boxingされているにしても

*9:ごめん、ちょっと嘘付いてる