587 Stimmen

Wann ist es sinnvoll, partielle C#-Klassen zu verwenden?

Ich frage mich, ob mir jemand einen Überblick darüber geben kann, warum ich sie verwenden sollte und welchen Vorteil ich dadurch erhalte.

3voto

Jay Punkte 31

Partielle Klassen halfen kürzlich bei der Versionskontrolle, wenn mehrere Entwickler eine Datei ergänzten, in der neue Methoden in denselben Teil der Datei eingefügt wurden (automatisiert durch Resharper).

Diese Pushes nach Git verursachten Merge-Konflikte. Ich habe keine Möglichkeit gefunden, dem Merge-Tool mitzuteilen, dass es die neuen Methoden als vollständigen Codeblock übernehmen soll.

Partielle Klassen ermöglichen es den Entwicklern, sich an eine Version ihrer Datei zu halten, und wir können sie später von Hand wieder einfügen.

Beispiel -

  • MainClass.cs - enthält Felder, Konstruktor, etc.
  • MainClass1.cs - neuer Code eines Entwicklers bei der Implementierung
  • MainClass2.cs - ist eine weitere Entwicklerklasse für ihren neuen Code.

3voto

Eli Punkte 4016

De MSDN :

Zur Kompilierungszeit werden die Attribute von Definitionen von Teiltypen zusammengeführt. Betrachten wir zum Beispiel die folgenden Deklarationen:

[SerializableAttribute]
partial class Moon { }

[ObsoleteAttribute]
partial class Moon { }

Sie sind gleichbedeutend mit den folgenden Erklärungen:

[SerializableAttribute]
[ObsoleteAttribute]
class Moon { }

Die folgenden Definitionen wurden aus den Definitionen aller Teiltypen zusammengeführt:

  • XML-Kommentare

  • Schnittstellen

  • Parameterattribute vom generischen Typ

  • Klassenattribute

  • Mitglieder

2. eine andere Sache, verschachtelte partielle Klassen können auch partiell sein:

partial class ClassWithNestedClass
{
    partial class NestedClass { }
}

partial class ClassWithNestedClass
{
    partial class NestedClass { }
}

2voto

shashi Punkte 21

Im Folgenden werden einige der Vorteile von Teilklassen aufgeführt.

Sie können den Code für das UI-Design und den Code für die Geschäftslogik trennen, damit er leicht zu lesen und zu verstehen ist. Wenn Sie zum Beispiel eine Webanwendung mit Visual Studio entwickeln und ein neues Webformular hinzufügen, gibt es zwei Quelldateien, "aspx.cs" und "aspx.designer.cs". Diese beiden Dateien haben die gleiche Klasse mit dem Schlüsselwort partial. Die Klasse ".aspx.cs" enthält den Geschäftslogikcode, während "aspx.designer.cs" die Definition der Benutzeroberfläche enthält.

Bei der Arbeit mit automatisch generierten Quellen kann der Code der Klasse hinzugefügt werden, ohne dass die Quelldatei neu erstellt werden muss. Sie arbeiten zum Beispiel mit LINQ to SQL und erstellen eine DBML-Datei. Wenn Sie nun eine Tabelle ziehen und ablegen, wird eine Teilklasse in designer.cs erstellt und alle Tabellenspalten haben Eigenschaften in der Klasse. Sie benötigen weitere Spalten in dieser Tabelle, um sie in das UI-Grid einzubinden, wollen aber keine neue Spalte zur Datenbanktabelle hinzufügen. Daher können Sie eine separate Quelldatei für diese Klasse erstellen, die eine neue Eigenschaft für diese Spalte enthält, und es wird eine partielle Klasse sein. Das hat Auswirkungen auf die Zuordnung zwischen Datenbanktabelle und DBML-Entität, aber man kann leicht ein zusätzliches Feld erhalten. Das bedeutet, dass Sie den Code selbst schreiben können, ohne sich mit dem vom System generierten Code herumzuschlagen.

Mehr als ein Entwickler kann gleichzeitig den Code für die Klasse schreiben.

Sie können Ihre Anwendung besser pflegen, indem Sie große Klassen komprimieren. Angenommen, Sie haben eine Klasse, die mehrere Schnittstellen hat, so dass Sie mehrere Quelldateien je nach implementierter Schnittstelle erstellen können. Es ist einfach, eine implementierte Schnittstelle zu verstehen und zu pflegen, für die die Quelldatei eine Teilklasse enthält.

2voto

Craig Wilcox Punkte 1487

Ich finde es beunruhigend, dass das Wort "Kohäsion" in diesen Beiträgen (bis jetzt) nirgends vorkommt. Und ich finde es auch beunruhigend, dass irgendjemand glaubt, dass die Ermöglichung oder Förderung großer Klassen und Methoden irgendwie eine gute Sache ist. Wenn man versucht, eine Code-Basis zu verstehen und zu pflegen, ist "partiell" scheiße.

1voto

Ɖiamond ǤeezeƦ Punkte 3143

Immer, wenn ich eine Klasse habe, die eine verschachtelte Klasse enthält, die von erheblicher Größe/Komplexität ist, markiere ich die Klasse als partial und legen Sie die verschachtelte Klasse in eine separate Datei. Ich benenne die Datei, die die verschachtelte Klasse enthält, nach der Regel: [Klassenname].[Name der verschachtelten Klasse].cs.

Im folgenden MSDN-Blog wird die Verwendung von partiellen Klassen mit verschachtelten Klassen zur besseren Wartbarkeit erläutert: http://blogs.msdn.com/b/marcelolr/archive/2009/04/13/using-partial-classes-with-nested-classes-for-maintainability.aspx

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X