Freigeben über


Fehler und Warnungen im Zusammenhang mit partial Typ- und partial Memberdeklarationen

Es gibt zahlreiche Fehler im Zusammenhang mit partial Typ- und partial Memberdeklarationen:

  • CS0260: Fehlender partieller Modifizierer für die Deklaration des Typs; eine weitere partielle Deklaration dieses Typs ist vorhanden.
  • CS0261: Partielle Deklarationen des Typs müssen entweder nur Klassen, nur Strukturen oder nur Schnittstellen beinhalten.
  • CS0262: Partielle Deklarationen des Typs haben Zugriffsmodifizierer, die miteinander in Konflikt stehen
  • CS0263: Partielle Deklarationen des Typs dürfen keine unterschiedlichen Basisklassen angebe.
  • CS0264: Partielle Deklarationen des Typs müssen die gleichen Typ-Parameternamen in der gleichen Reihenfolge aufweisen
  • CS0265: Partielle Deklarationen des Typs weisen inkonsistente Einschränkungen für den Typ-Parameter „type parameter“ auf
  • CS0267: Der partielle Modifizierer kann nur unmittelbar vor 'class', 'record', 'struct', 'interface' oder einem Methodenrückgabetyp angezeigt werden
  • CS0282: Es gibt keine definierte Sortierung zwischen Feldern in mehreren Deklarationen der partieller Klasse oder der Struktur „type“. Um eine Sortierung anzugeben, müssen sich alle Instanzenfelder in derselben Deklaration befinden.
  • CS0501: „member function“ muss einen Text deklarieren, da sie nicht als abstract, extern oder partial markiert ist
  • CS0750: Partielle Member dürfen nicht den Modifizierer „abstract“ aufweisen.
  • CS0751: Partielle Member müssen in einem partiellen class oder einem partiellen struct deklariert werden
  • CS0754: Ein partieller Member darf keine Schnittstellenmethoden explizit implementieren.
  • CS0755: Beide partiellen Methodendeklarationen müssen Erweiterungsmethoden sein, oder keine von beiden darf eine Erweiterungsmethode sein.
  • CS0756: Eine partielle Methode darf nicht über mehrere definierende Deklarationen verfügen.
  • CS0757: Eine partielle Methode darf nicht über mehrere implementierende Deklarationen verfügen.
  • CS0759: Für die implementierende Deklaration der partiellen Methode wurde keine definierende Deklaration gefunden.
  • CS0761: Partielle Methodendeklarationen von method<T> weisen inkonsistente Typ-Parametereinschränkungen auf.
  • CS0762: Auf der Grundlage der Methode kann kein Delegat erstellt werden, da es sich um eine partielle Methode ohne implementierende Deklaration handelt
  • CS0763: Beide partiellen Methodendeklarationen müssen static sein, oder keine von beiden darf static sein.
  • CS0764: Beide partiellen Methodendeklarationen müssen unsafe sein, oder keine von beiden darf unsafe sein
  • CS1067: Partielle Deklarationen müssen die gleichen Typ-Parameternamen und Varianzmodifizierer in der gleichen Reihenfolge aufweisen.
  • CS8142: Beide partiellen Memberdeklarationen müssen dieselben Tupel-Elementnamen verwenden.
  • CS8663: Beide partiellen Memberdeklarationen müssen schreibgeschützt sein, oder keine von beiden darf schreibgeschützt sein
  • CS8796: Die partielle Methode muss über Zugriffsmodifizierer verfügen, da sie einen nicht leeren Rückgabetyp aufweist.
  • CS8795: Der partielle Member muss einen Implementierungsteil aufweisen, weil er über Zugriffsmodifizierer verfügt.
  • CS8797: Die partielle Methode muss über Zugriffsmodifizierer verfügen, da sie „out“-Parameter aufweist.
  • CS8798: Die partielle Methode muss über Zugriffsmodifizierer verfügen, da sie einen „virtual“-, „override“-, „sealed“-, „new“- oder „extern“-Modifizierer hat.
  • CS8799: Beide partiellen Memberdeklarationen müssen identische Zugriffsmodifizierer aufweisen.
  • CS8800: Beide partiellen Memberdeklarationen müssen identische Kombinationen von virtual-, override-, sealed und new-Modifizierern aufweisen.
  • CS8817: Beide partiellen Methodendeklarationen müssen den gleichen Rückgabetyp aufweisen.
  • CS8818: Partielle Memberdeklarationen müssen übereinstimmende ref Rückgabewerte aufweisen.
  • CS8863: Nur eine einzelne partielle Typ-Deklaration darf eine Parameterliste aufweisen
  • CS8988: Der scoped Modifizierer des Parameters stimmt nicht mit der partiellen Definition überein.
  • CS9248: Die partielle Eigenschaft muss über einen Implementierungsteil verfügen.
  • CS9249: Die partielle Eigenschaft muss über einen Definitionsteil verfügen.
  • CS9250: Eine partielle Eigenschaft darf nicht über mehrere definierende Deklarationen verfügen und kann keine automatische Eigenschaft sein.
  • CS9251: Eine partielle Eigenschaft darf nicht über mehrere implementierende Deklarationen verfügen
  • CS9252: Der Eigenschaftenaccessor muss implementiert sein, da er für den Definitionsteil deklariert ist
  • CS9253: Der Eigenschaftenaccessor implementiert keinen Accessor, der im Definitionsteil deklariert ist
  • CS9254: Der Eigenschaftenaccessor muss mit dem Definitionsteil übereinstimmen
  • CS9255: Beide partiellen Eigenschaftendeklarationen müssen denselben Typ aufweisen.
  • CS9256: Partielle Eigenschaftendeklarationen weisen Signaturunterschiede auf.
  • CS9257: Beide partiellen Eigenschaftendeklarationen müssen erforderlich sein, oder keine darf erforderlich sein

In den folgenden Abschnitten werden die Ursachen und Abhilfemaßnahmen für diese Fehler und Warnungen erläutert.

Partial types (Partielle Typen)

  • CS0260: Fehlender partieller Modifizierer für die Deklaration des Typs; eine weitere partielle Deklaration dieses Typs ist vorhanden.
  • CS0261: Partielle Deklarationen des Typs müssen entweder nur Klassen, nur Strukturen oder nur Schnittstellen beinhalten.
  • CS0262: Partielle Deklarationen des Typs haben Zugriffsmodifizierer, die miteinander in Konflikt stehen
  • CS0263: Partielle Deklarationen des Typs dürfen keine unterschiedlichen Basisklassen angebe.
  • CS0264: Partielle Deklarationen des Typs müssen die gleichen Typ-Parameternamen in der gleichen Reihenfolge aufweisen
  • CS0265: Partielle Deklarationen des Typs weisen inkonsistente Einschränkungen für den Typ-Parameter „type parameter“ auf
  • CS0267: Der partielle Modifizierer kann nur unmittelbar vor 'class', 'record', 'struct', 'interface' oder einem Methodenrückgabetyp angezeigt werden
  • CS8863: Nur eine einzelne partielle Typ-Deklaration darf eine Parameterliste aufweisen

Ihre partielle Typdeklaration kann dazu führen, dass der Compiler die folgende Warnung ausgibt:

  • CS0282: Es gibt keine definierte Sortierung zwischen Feldern in mehreren Deklarationen der partiellen class oder struct „Typ“. Um eine Sortierung anzugeben, müssen sich alle Instanzenfelder in derselben Deklaration befinden.

Für jeden partiellen Typ muss das partial-Schlüsselwort unmittelbar vor class, record, struct oder interface stehen. Der Compiler gibt einen Fehler aus, wenn dies in einer anderen Reihenfolge angezeigt wird. Außerdem:

  • Alle Deklarationen eines partiellen Typs müssen in Bezug auf den Typ übereinstimmen (class, struct, record class, record struct, readonly struct oder readonly record struct).
  • Alle Deklarationen müssen den partial-Modifizierer beinhalten.
  • Die Deklarationen für einen generischen partiellen Typ müssen dieselben Typ-Parameter in derselben Reihenfolge enthalten.

Einige Teile der Deklaration müssen nicht für alle Deklarationen für einen Typ wiederholt werden. Wenn diese Elemente jedoch auf mehreren partial-Deklarationen wiederholt werden, müssen sie übereinstimmen:

  • Alle Zugriffsmodifizierer, wie etwa public.
  • Alle Basisklassen- oder implementierten Schnittstellen.
  • Alle Einschränkungen für Typ-Parameter.

Ein primärer Konstruktor kann für höchstens eine Deklaration für einen partiellen Typ deklariert werden.

Der Compiler gibt eine Warnung aus, wenn mehrere Felder in mehreren Dateien für einen partial struct-Typ deklariert werden. Wenn die Layout-Reihenfolge wichtig ist, müssen Sie alle Felder in derselben Datei deklarieren. Wenn die Reihenfolge keine Rolle spielt, können Sie die System.Runtime.InteropServices.StructLayoutAttribute mit dem LayoutKind.Auto-Wert verwenden.

Partielle Member

  • CS0750: Partielle Member dürfen nicht den Modifizierer „abstract“ aufweisen.
  • CS0751: Partielle Member müssen in einem partiellen class oder einem partiellen struct deklariert werden
  • CS0754: Ein partieller Member darf keine Schnittstellenmethoden explizit implementieren.
  • CS0763: Beide partiellen Methodendeklarationen müssen static sein, oder keine von beiden darf static sein.
  • CS0764: Beide partiellen Methodendeklarationen müssen unsafe sein, oder keine von beiden darf unsafe sein
  • CS8142: Beide partiellen Memberdeklarationen müssen dieselben Tupel-Elementnamen verwenden.
  • CS8663: Beide partiellen Memberdeklarationen müssen schreibgeschützt sein, oder keine von beiden darf schreibgeschützt sein
  • CS8799: Beide partiellen Memberdeklarationen müssen identische Zugriffsmodifizierer aufweisen.
  • CS8800: Beide partiellen Memberdeklarationen müssen identische Kombinationen von virtual-, override-, sealed- und new-Modifizierern aufweisen.
  • CS8818: Partielle Memberdeklarationen müssen übereinstimmende ref-Rückgabewerte aufweisen.
  • CS8988: Der scoped Modifizierer des Parameters stimmt nicht mit der partiellen Definition überein.

Partielle Member verfügen über zwei Deklarationen. Die Deklaration ohne Implementierung ist die deklarierende Deklaration. Die Deklaration mit der Implementierung ist die implementierende Deklaration. Partielle Member sind nur in einem partial-Typ zulässig. Partielle Member können nicht abstract sein. Partielle Member können keine Schnittstelle explizit implementieren. Beide Deklarationen eines partiellen Members müssen identische Signaturen aufweisen. Beispielsweise können beide oder keine Deklarationen die Modifizierer static oder unsafe enthalten.

Partielle Methoden

  • CS0501: „member function“ muss einen Text deklarieren, da sie nicht als abstract, extern oder partial markiert ist
  • CS0755: Beide partiellen Methodendeklarationen müssen Erweiterungsmethoden sein, oder keine von beiden darf eine Erweiterungsmethode sein.
  • CS0756: Eine partielle Methode darf nicht über mehrere definierende Deklarationen verfügen.
  • CS0757: Eine partielle Methode darf nicht über mehrere implementierende Deklarationen verfügen.
  • CS0759: Für die implementierende Deklaration der partiellen Methode wurde keine definierende Deklaration gefunden.
  • CS0761: Partielle Methodendeklarationen von method<T> weisen inkonsistente Typ-Parametereinschränkungen auf.
  • CS0762: Auf der Grundlage der Methode kann kein Delegat erstellt werden, da es sich um eine partielle Methode ohne implementierende Deklaration handelt
  • CS1067: Partielle Deklarationen müssen die gleichen Typ-Parameternamen und Varianzmodifizierer in der gleichen Reihenfolge aufweisen.
  • CS8796: Die partielle Methode muss über Zugriffsmodifizierer verfügen, da sie einen nicht leeren Rückgabetyp aufweist.
  • CS8795: Der partielle Member muss einen Implementierungsteil aufweisen, weil er über Zugriffsmodifizierer verfügt.
  • CS8797: Die partielle Methode muss über Zugriffsmodifizierer verfügen, da sie „out“-Parameter aufweist.
  • CS8798: Die partielle Methode muss über Zugriffsmodifizierer verfügen, da sie einen „virtual“-, „override“-, „sealed“-, „new“ oder „extern“-Modifizierer hat.
  • CS8817: Beide partiellen Methodendeklarationen müssen den gleichen Rückgabetyp aufweisen.

Für bestimmte partial-Methodendeklarationen ist keine Implementierungsdeklaration erforderlich. Das heißt: Wenn das Mitglied void zurückgibt, werden keine Zugriffsmodifizierer deklariert (einschließlich des standardmäßigen private-Modifizierers), und es wird keiner der Modifizierer virtual, override, sealed oder new eingeschlossen. Andernfalls muss jede partielle Methode sowohl die deklarierende als auch die implementierende Deklaration enthalten.

Wenn eine partielle Methode eine implementierende Deklaration enthält, müssen beide Deklarationen identisch sein. Es kann genau eine implementierende Deklaration definiert werden.

Partielle Eigenschaften

Die folgenden Fehler deuten auf Fehler in Ihren partiellen Eigenschafts- oder Indexerdeklarationen hin:

  • CS9248: Die partielle Eigenschaft muss über einen Implementierungsteil verfügen.
  • CS9249: Die partielle Eigenschaft muss über einen Definitionsteil verfügen.
  • CS9250: Eine partielle Eigenschaft darf nicht über mehrere definierende Deklarationen verfügen und kann keine automatische Eigenschaft sein.
  • CS9251: Eine partielle Eigenschaft darf nicht über mehrere implementierende Deklarationen verfügen
  • CS9252: Der Eigenschaftenaccessor muss implementiert sein, da er für den Definitionsteil deklariert ist
  • CS9253: Der Eigenschaftenaccessor implementiert keinen Accessor, der im Definitionsteil deklariert ist
  • CS9254: Der Eigenschaftenaccessor muss mit dem Definitionsteil übereinstimmen
  • CS9255: Beide partiellen Eigenschaftendeklarationen müssen denselben Typ aufweisen.
  • CS9257: Beide partiellen Eigenschaftendeklarationen müssen erforderlich sein, oder keine darf erforderlich sein

Die folgende Warnung weist auf einen Signaturunterschied bei der Deklarierung und Implementierung von Deklarationen in einer partiellen Eigenschaft hin:

  • CS9256: Partielle Eigenschaftendeklarationen weisen Signaturunterschiede auf.

Eine partielle Eigenschaft oder ein Indexer muss sowohl über eine deklarierende Deklaration als auch über eine implementierende Deklaration verfügen. Die Signaturen für beide Deklarationen müssen übereinstimmen. Da die deklarierende Deklaration dieselbe Syntax wie eine automatisch implementierte Eigenschaft verwendet, kann die Implementierungsdeklaration keine automatisch implementierte Eigenschaft sein. Die Accessoren müssen über Text verfügen.