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.

22voto

kausar ahmed Punkte 241

Es ist richtig, dass Partial Class bei der automatischen Codegenerierung verwendet wird, eine Verwendung kann die Aufrechterhaltung einer großen Klassendatei sein, die Tausende von Codezeilen haben könnte. Man kann nie wissen, ob die Klasse am Ende nicht 10.000 Zeilen hat und man nicht eine neue Klasse mit einem anderen Namen erstellen möchte.

public partial class Product
{
    // 50 business logic embedded in methods and properties..
}

public partial class Product
{
    // another 50 business logic embedded in methods and properties..
}
//finally compile with product.class file.

Ein weiterer möglicher Nutzen wäre, dass mehrere Entwickler an derselben Klasse arbeiten können, da sie an verschiedenen Orten gespeichert sind. Die Leute werden vielleicht lachen, aber man weiß nie, ob das nicht manchmal ganz praktisch ist.

Produkt1.cs

public partial class Product
{
    //you are writing the business logic for fast moving product
}

Produkt2.cs

public partial class Product
{
    // Another developer writing some business logic...
}

Ich hoffe, es macht Sinn!

21voto

Vivek Saurav Punkte 2195

Partielle Klassen erstrecken sich über mehrere Dateien.

Wie kann man den partiellen Modifikator für eine C#-Klassendeklaration verwenden?

Mit partiellen Klassen können Sie eine Klasse physisch in mehrere Dateien aufteilen. Dies wird häufig von Codegeneratoren durchgeführt.

Beispiel

Bei normalen C#-Klassen können Sie eine Klasse nicht in zwei verschiedenen Dateien desselben Projekts deklarieren. Aber mit dem partial Modifikator, können Sie.

Dies ist nützlich, wenn eine Datei häufig bearbeitet wird und die andere maschinell erstellt oder selten bearbeitet wird.

Hier ein Beispiel zur Verdeutlichung:

class Program
{
    static void Main()
    {
        A.A1();
        A.A2();
    }
}

Inhalt der Datei A1.cs: C#

using System;

partial class A
{
    public static void A1()
    {
        Console.WriteLine("A1");
    }
}

Inhalt der Datei A2.cs: C#

using System;

partial class A
{
    public static void A2()
    {
        Console.WriteLine("A2");
    }
}

Ausgabe:

A1
A2

Hier ist ein Teilbereich erforderlich.

Wenn Sie die partial erhalten Sie eine Fehlermeldung mit diesem Text:

[Der Namensraum ' <global namespace> ' enthält bereits eine Definition für ' A '].

Tipp:

Um dies zu beheben, können Sie entweder die partial Schlüsselwort, oder ändern Sie einen der Klassennamen.

Wie geht der C#-Compiler mit partiellen Klassen um?

Wenn Sie das obige Programm disassemblieren (mit IL Disassembler), werden Sie feststellen, dass die Dateien A1.cs und A2.cs eliminiert sind. Sie werden feststellen, dass die Klasse A vorhanden ist.

Die Klasse A wird die Methoden A1 und A2 im selben Codeblock enthalten. Die beiden Klassen wurden zu einer verschmolzen.

Kompiliertes Ergebnis von A1.cs und A2.cs: C#

internal class A
{
    // Methods
    public static void A1()
    {
        Console.WriteLine("A1");
    }

    public static void A2()
    {
        Console.WriteLine("A2");
    }
}

Zusammenfassung

  • Partielle Klassen können bestimmte Situationen der C#-Programmierung vereinfachen.
  • Sie werden häufig in Visual Studio bei der Erstellung von Windows Forms/WPF-Programmen verwendet.
  • Der maschinengenerierte C#-Code ist separat.
  • Oder Sie können die gesamte Beschreibung finden ici .

12voto

Alles so sauber wie möglich zu halten, wenn Sie mit großen Klassen arbeiten, oder wenn Sie in einem Team arbeiten, können Sie bearbeiten, ohne zu überschreiben (oder immer Änderungen zu übertragen)

11voto

cletus Punkte 596503

Die Hauptanwendung für partielle Klassen ist generierter Code. Wenn Sie sich das WPF (Windows Presentation Foundation)-Netzwerk ansehen, definieren Sie Ihre Benutzeroberfläche mit Markup (XML). Dieses Markup wird in partielle Klassen kompiliert. Sie füllen den Code mit Ihren eigenen partiellen Klassen aus.

10voto

STW Punkte 42452

Als Alternative zu den Pre-Compiler-Direktiven.

Wenn Sie Pre-Compiler-Direktiven verwenden (nämlich #IF DEBUG ), dann haben Sie am Ende etwas unschön aussehenden Code, der mit Ihrem eigentlichen Release-Code vermischt ist.

Sie können eine separate Teilklasse erstellen, die diesen Code enthält, und entweder die gesamte Teilklasse in eine Direktive verpacken oder diese Codedatei auslassen, damit sie nicht an den Compiler gesendet wird (was im Grunde dasselbe ist).

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