Suche…


Einführung

Partial classes bietet uns die Möglichkeit, Klassen in mehrere Teile und in mehrere Quelldateien aufzuteilen. Alle Teile werden während der Kompilierzeit zu einer einzigen Klasse zusammengefasst. Alle Teile sollten das Schlüsselwort partial und sollten die gleiche Zugänglichkeit haben. Alle Teile sollten in derselben Assembly vorhanden sein, damit sie während der Kompilierzeit aufgenommen werden kann.

Syntax

  • public partial class MyPartialClass {}

Bemerkungen

  • Teilklassen müssen in derselben Assembly und in demselben Namensraum als die Klasse definiert werden, die sie erweitern.

  • Alle Teile der Klasse müssen das partial Schlüsselwort verwenden.

  • Alle Teile der Klasse müssen dieselbe Zugänglichkeit haben. public / protected / private etc ..

  • Wenn ein Teil das abstract Schlüsselwort verwendet, wird der kombinierte Typ als abstrakt betrachtet.

  • Wenn ein Teil das sealed Schlüsselwort verwendet, gilt der kombinierte Typ als versiegelt.

  • Wenn ein Teil einen Basistyp verwendet, erbt der kombinierte Typ von diesem Typ.

  • Der kombinierte Typ erbt alle für alle Teilklassen definierten Schnittstellen.

Teilklassen

Partielle Klassen bieten die Möglichkeit, Klassendeklarationen aufzuteilen (normalerweise in separate Dateien). Ein häufiges Problem, das mit partiellen Klassen gelöst werden kann, besteht darin, dass Benutzer automatisch generierten Code ändern können, ohne befürchten zu müssen, dass ihre Änderungen überschrieben werden, wenn der Code erneut generiert wird. Auch mehrere Entwickler können mit derselben Klasse oder denselben Methoden arbeiten.

using System;

namespace PartialClassAndMethods
{
    public partial class PartialClass
    {
        public void ExampleMethod() {
            Console.WriteLine("Method call from the first declaration.");
        }
    }

    public partial class PartialClass
    {
        public void AnotherExampleMethod()
        {
            Console.WriteLine("Method call from the second declaration.");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            PartialClass partial = new PartialClass();
            partial.ExampleMethod(); // outputs "Method call from the first declaration."
            partial.AnotherExampleMethod(); // outputs "Method call from the second declaration."
        }
    }
}

Teilmethoden

Die Teilmethode besteht aus der Definition in einer Teilklassendeklaration (als allgemeines Szenario - in der automatisch generierten) und der Implementierung in einer anderen Teilklassendeklaration.

using System;

namespace PartialClassAndMethods
{
    public partial class PartialClass // Auto-generated
    {
        partial void PartialMethod();
    }

    public partial class PartialClass // Human-written
    {
        public void PartialMethod()
        {
            Console.WriteLine("Partial method called.");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            PartialClass partial = new PartialClass();
            partial.PartialMethod(); // outputs "Partial method called."
        }
    }
}

Teilklassen, die von einer Basisklasse erben

Bei der Vererbung von einer Basisklasse muss nur für eine Teilklasse die Basisklasse angegeben werden.

// PartialClass1.cs
public partial class PartialClass : BaseClass {}

// PartialClass2.cs
public partial class PartialClass {}

Sie können dieselbe Basisklasse in mehreren Teilklassen angeben. Es wird von einigen IDE-Tools als redundant gekennzeichnet, aber es wird korrekt kompiliert.

// PartialClass1.cs
public partial class PartialClass : BaseClass {}

// PartialClass2.cs
public partial class PartialClass : BaseClass {} // base class here is redundant

Sie können keine unterschiedlichen Basisklassen in mehreren Teilklassen angeben. Dies führt zu einem Compiler-Fehler.

// PartialClass1.cs
public partial class PartialClass : BaseClass {} // compiler error

// PartialClass2.cs
public partial class PartialClass : OtherBaseClass {} // compiler error


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow