既出な話だったら申し訳ないんですが、

今C++からC#に移行しようと.NETを勉強中なんですが
参照型(class)と値型(struct)が、仕様的におかしい気がして
仕方ないんです。

C++では、あるオブジェクトのインスタンスが参照型になるか
値型になるかは、使用時に自由に選ぶことが出来ます。
T t; // 値型
T* pt = new T(); // 参照型
対して,C#は定義時に問答無用で決められてしまいます。
別にGCが絡む問題があるとも思えないし、まったく意味のない改悪じゃないでしょうか?

また、C#で以下のコードだけ見た場合、
変数tが値型であるか参照型であるかどうやって知るんでしょうか。
T t = new T();
値型と参照型の混同、勘違いはバグの元であり
わざわざそうしやすくしているようにしか見えません。

C#プログラマの方はどう思って使っていますか?