Ich frage mich, ob mir jemand einen Überblick darüber geben kann, warum ich sie verwenden sollte und welchen Vorteil ich dadurch erhalte.
Antworten
Zu viele Anzeigen?Der größte Nutzen partieller Klassen besteht darin, den Codegeneratoren/Designern das Leben zu erleichtern. Partielle Klassen ermöglichen es dem Generator, einfach den Code zu emittieren, den er braucht, und er muss sich nicht um die Änderungen des Benutzers an der Datei kümmern. Die Benutzer können die Klasse durch eine zweite partielle Klasse mit neuen Elementen versehen. Dies bietet einen sehr sauberen Rahmen für die Trennung von Belangen.
Besser ist es, sich anzusehen, wie die Designer vor der Einführung von Teilklassen funktionierten. Der WinForms-Designer würde den gesamten Code innerhalb einer Region ausspucken, mit stark formulierten Kommentaren, den Code nicht zu verändern. Er musste alle Arten von Heuristiken einfügen, um den generierten Code für die spätere Verarbeitung zu finden. Jetzt kann er einfach die Datei designer.cs öffnen und hat ein hohes Maß an Vertrauen, dass sie nur für den Designer relevanten Code enthält.
Abgesehen von den anderen Antworten...
Ich habe sie als hilfreiches Sprungbrett bei der Umstrukturierung von Gott-Klassen gefunden. Wenn eine Klasse mehrere Zuständigkeiten hat (vor allem, wenn es sich um eine sehr große Codedatei handelt), dann finde ich es vorteilhaft, 1 Teilklasse pro Zuständigkeit hinzuzufügen, um den Code zunächst zu organisieren und dann zu überarbeiten.
Das ist sehr hilfreich, weil es den Code lesbarer macht, ohne das Ausführungsverhalten zu beeinflussen. Es kann auch helfen, zu erkennen, wann eine Verantwortung leicht zu refaktorisieren ist oder eng mit anderen Aspekten verflochten ist.
Allerdings - um das klarzustellen - ist dies immer noch schlechter Code, am Ende der Entwicklung wollen Sie immer noch eine Verantwortung pro Klasse ( NO pro Teilklasse). Es ist nur ein Sprungbrett :)
- Mehrere Entwickler Mit partiellen Klassen können mehrere Entwickler an derselben Klasse arbeiten leicht arbeiten.
- Code-Generator Partielle Klassen werden hauptsächlich vom Codegenerator verwendet, um die verschiedene Anliegen getrennt zu halten
- Partielle Methoden Mit partiellen Klassen können Sie auch partielle Methoden definieren, wobei ein Entwickler einfach die Methode definieren kann und der andere Entwickler diese implementieren kann.
-
Nur partielle Methodenerklärung Auch der Code wird nur mit der Methodendeklaration kompiliert und wenn die Implementierung der Methode nicht vorhanden ist, kann der Compiler diesen Teil des Codes sicher entfernen entfernen und es tritt kein Kompilierzeitfehler auf.
Zur Überprüfung von Punkt 4. Erstellen Sie einfach ein Winform-Projekt und fügen Sie diese Zeile nach dem Form1-Konstruktor ein und versuchen Sie, den Code zu kompilieren
partial void Ontest(string s);
Hier sind einige Punkte, die bei der Implementierung partieller Klassen zu beachten sind.
- Verwenden Sie das Schlüsselwort partial in jedem Teil der partiellen Klasse.
- Der Name jedes Teils der Teilklasse sollte derselbe sein, aber der Name der Quelldatei für jeden Teil der Teilklasse kann unterschiedlich sein.
- Alle Teile einer partiellen Klasse sollten im selben Namespace liegen.
- Jeder Teil einer partiellen Klasse sollte sich in derselben Assembly oder DLL befinden, d.h. Sie können eine partielle Klasse nicht in Quelldateien aus einem anderen Klassenbibliotheksprojekt erstellen.
- Jeder Teil einer partiellen Klasse muss die gleiche Zugänglichkeit haben. (d.h.: privat, öffentlich oder geschützt)
- Wenn Sie eine Klasse oder Schnittstelle an eine Teilklasse vererben, wird sie an alle Teile dieser Teilklasse vererbt.
- Wenn ein Teil einer partiellen Klasse versiegelt ist, wird die gesamte Klasse versiegelt.
- Wenn ein Teil einer Teilklasse abstrakt ist, wird die gesamte Klasse als abstrakte Klasse betrachtet.
Eine großartige Anwendung ist die Trennung von generiertem Code und handgeschriebenem Code, die zur selben Klasse gehören.
Da LINQ to SQL partielle Klassen verwendet, können Sie zum Beispiel Ihre eigene Implementierung bestimmter Funktionen (wie Many-to-Many-Beziehungen) schreiben, und diese Teile des benutzerdefinierten Codes werden nicht überschrieben, wenn Sie den Code neu generieren.
Das Gleiche gilt für WinForms-Code. Der gesamte vom Designer generierte Code wird in einer Datei gespeichert, die Sie normalerweise nicht anfassen. Ihr handgeschriebener Code kommt in eine andere Datei. Wenn Sie also etwas im Designer ändern, werden Ihre Änderungen nicht weggeblasen.
- See previous answers
- Weitere Antworten anzeigen