Wird das Pimpl-Idiom in C# verwendet?
Das hängt davon ab, was Sie mit diesem Idiom meinen.
Das fragliche Idiom besteht im Wesentlichen darin, die Implementierungsdetails eines Typs in eine Klasse und die öffentliche Oberfläche in eine Wrapperklasse zu trennen, die einfach einen Zeiger auf die Implementierungsklasse festhält.
Dies hat zwei Vorteile.
Erstens kann es in C++ zu Verbesserungen in der Kompilierzeit führen, da die Benutzer der öffentlichen Oberfläche nur die Header-Datei mit der öffentlichen Oberfläche analysieren müssen; Sie müssen die Headerdatei mit den Implementierungsdetails nicht analysieren.
Zweitens führt es zu einer sehr sauberen Trennung der Schnittstelle von der Implementierung; Die Implementierung kann sich völlig ändern, ohne dass es jemals Auswirkungen auf den Verbraucher hat, da der Verbraucher die Implementierungsdetails nie sieht.
Der erste Vorteil ist in C# egal. Der C# -Compiler ist schnell. (Zu einem großen Teil natürlich, weil die Sprache entworfen wurde, um schnell kompiliert zu werden.)
Der zweite Vorteil ist von beträchtlichem Gebrauch in C#. In C# wäre die idiomatische Methode, dieses Muster zu implementieren, eine private verschachtelte Klasse zu machen, die die "echte" Arbeit und eine öffentliche Klasse ausführt, die nur eine Fassade mit der öffentlichen Oberfläche ist.
Eine Technik, die ich besonders gerne in C# ist die öffentliche Klasse der Basisklasse der privaten geschachtelten Klasse zu machen, der Basisklasse einen eigenen Fertigungsbetrieb an Dritte Erweiterung zu verhindern, und verwenden Sie die Factory-Pattern-Instanzen auszuzuteilen der privaten geschachtelten Klasse.
Ich verstehe nicht wirklich, warum die gleiche Sache nicht mit C++ getan werden kann.
Dann ermutige ich Sie zu versuchen, einen C++ - Compiler zu schreiben, der dies tut. Es wird Ihnen entweder gelingen, einen viel schnelleren C++ - Compiler zu erstellen, oder Sie werden herausfinden, warum dasselbe in C++ nicht möglich ist. Sie profitieren so oder so!
Es ist nicht "notwendig" in C++, es ist nur da, um Build-Zeiten zu sparen (und in einigen Fällen binäre Kompatibilität zu erhalten). Wenn C++ so schnell kompiliert/verlinkt wird, wie C# kompiliert wird, bezweifle ich, dass irgendjemand sich darum kümmern würde. – ildjarn
Sie können Eric Lippert's Beitrag finden, [Wie viele Pässe] (http://blogs.msdn.com/b/ericlippert/archive/2010/02/04/how-many-passes.aspx), von Interesse. – Brian