C++のクラスは、= や実体による引数の受け渡しによってコピーできます。ref classで定義されたクラスはoperator= や コピーコンストラクタをもたない場合勝手にコピーされることはありません。
ref class C { int i; }; void func(C c) {} int main() { C c; C d; func(c); // エラー d = c; // エラー }
キーワード value classで定義されたクラスは、コピーすることができ、そのコピーはビットワイズ、すなわちmemcpyのようなコピーです。
よって、value classにはこのようなコピーが可能な型しか含むことができません。すなわちref classで定義されたクラスのインスタンスを含むことはできません。
またvalue classはスタック上に作成することができます。ref classの場合はスタック上に作成したように見えても、実際はマネージヒープ上に作成されましたが、value classは本当にスタック上に作られます。
このような理由からも、value classにはref classのインスタンスを含むことができません。
また、value classは以下のものを持つことはできません。
その他、継承もできません。(interfaceを除く)