pimplイディオムはC#で使用されていますか?
これは、このイディオムの意味によって異なります。
問題のイディオムは、基本的に、型の実装の詳細を1つのクラスに分離し、パブリックサーフェス領域を実装クラスへのポインターを保持するラッパークラスに分離することです。
これには2つの利点があります。
まず、C ++では、パブリックサーフェス領域のコンシューマーは、パブリックサーフェス領域を含むヘッダーファイルを解析するだけでよいため、コンパイル時間の改善につながる可能性があります。実装の詳細を含むヘッダーファイルを解析する必要はありません。
第二に、それは実装からのインターフェースの非常にクリーンな分離につながります。消費者には実装の詳細が表示されないため、消費者に影響を与えることなく、実装を完全に変更できます。
最初の利点は、C#では関係ありません。C#コンパイラは高速です。(もちろん、言語は高速にコンパイルできるように設計されているためです。)
2番目の利点は、C#でかなり役立つことです。C#では、このパターンを実装する慣用的な方法は、「実際の」作業を行うプライベートのネストされたクラスと、パブリック表面積を持つ単なるファサードであるパブリッククラスを作成することです。
私がC#で特に気に入っている手法は、パブリッククラスをプライベートネストクラスの基本クラスにし、基本クラスにプライベートコンストラクターを与えてサードパーティの拡張を防ぎ、ファクトリパターンを使用してプライベートネストクラスのインスタンスを配布することです。
C++で同じことができない理由がよくわかりません。
次に、そうするC++コンパイラを作成してみることをお勧めします。はるかに高速なC++コンパイラの作成に成功するか、C++で同じことができない理由がわかります。どちらの方法でもメリットがあります。