1. Was ist ein lokaler Typ?
C# 2.0 führte das Konzept lokaler Typen ein. Lokale Typen ermöglichen es uns, eine Klasse, Struktur oder Schnittstelle in mehrere Teile zu unterteilen und diese in mehreren verschiedenen CS-Dateien zu implementieren.
Partielle Typen eignen sich für folgende Situationen:
(1) Der Typ ist besonders groß und sollte nicht in einer Datei implementiert werden.
(2) Ein Teil des Codes in einem Typ ist Code, der von automatisierten Tools generiert wurde und nicht mit von uns selbst geschriebenem Code vermischt werden sollte.
(3) Um einen Kurs zu schreiben, müssen mehrere Personen zusammenarbeiten.
Lokale Typen sind ein reiner Kompilierungsprozess der Sprachschicht, der keinen Einfluss auf den Ausführungsmechanismus hat. Tatsächlich führt der C#-Compiler während der Kompilierung weiterhin die lokalen Typen jedes Teils zu einer vollständigen Klasse zusammen.
öffentliches Teilklassenprogramm
{
static void Main(string[] args)
{
}
}
Teilklassenprogramm
{
public void Test()
{
}
}
2. Einschränkungen für lokale Typen
(1) Lokale Typen Gilt nur für Klassen, Schnittstellen und Strukturen. Delegierte und Aufzählungen werden nicht unterstützt.
(2) Jeder Teil desselben Typs muss den Modifikator partiellen haben.
(3) Bei der Verwendung lokaler Typen müssen sich alle Teile eines Typs im selben Namensraum befinden.
(4) Alle Teile eines Typs müssen gleichzeitig kompiliert werden.
3. Hinweise zu partiellen Typen
(1) Das Schlüsselwort „partial“ ist ein kontextbezogenes Schlüsselwort, das nur dann die Bedeutung des Schlüsselworts hat, wenn es zusammen mit „class“, „struct“ und „interface“ platziert wird. Daher hat die Einführung von „Partial“ keine Auswirkungen auf Variablen mit dem Namen „Partial“ im vorhandenen Code.
(2) Jeder Teil eines lokalen Typs wird normalerweise in mehreren verschiedenen CS-Dateien abgelegt, aber der C#-Compiler ermöglicht es uns, sie in derselben Datei abzulegen.
4. Anwendungsfunktionen lokaler Typen
Funktionen lokaler Typen haben eine „kumulative“ Wirkung.
[Attribute1, Attribute2("Hello")]
partielle Klasse Class1{}
[Attribute3, Attribute2("Exit")]
partielle Klasse Class1{ }
entspricht
[Attribute1, Attribute2("Hello"), Attribute3, Attribute2("Exit")]
class Class1 {}
Hinweis: Attribute2-Attribute dürfen in einer Klasse mehrfach verwendet werden.
5. Modifikatoren für lokale Typen
(1) Zugriffsmodifikatoren für verschiedene Teile eines Typs müssen konsistent bleiben.
(2) Wenn eine Teilklasse den abstrakten Modifikator verwendet, wird die gesamte Klasse als abstrakte Klasse betrachtet.
(3) Wenn eine Teilklasse den versiegelten Modifikator verwendet, wird die gesamte Klasse als versiegelte Klasse betrachtet.
(4) Jeder Teil einer Klasse kann nicht widersprüchliche Modifikatoren verwenden. Sie können beispielsweise nicht „abstrakt“ für einen Teil und „versiegelt“ für einen anderen Teil verwenden.
(5) Wenn eine Teilklasse den statischen Modifikator verwendet, wird die gesamte Klasse als statische Klasse betrachtet.
6. Basisklassen und Schnittstellen lokaler Typen
(1) Die für jeden Teil eines Typs angegebenen Basisklassen müssen konsistent sein. Ein Abschnitt darf keine Basisklasse angeben, aber wenn sie angegeben wird, muss sie dieselbe sein.
(2) Schnittstellen für lokale Typen haben einen „kumulativen“ Effekt.
Teilklasse Klasse2: Iinterface1, Iinterface2 {}
Teilklasse Klasse2: Iinterface3 {}
Teilklasse Klasse2: Iinterface2 {}
entspricht
Klasse Klasse2: Iinterface1, Iinterface2, Iinterface3 {}