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 „partial“-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
  • CS9258: In dieser Sprachversion bindet das Schlüsselwort "field" an ein synthetisiertes Sicherungsfeld für die Eigenschaft. Um das Generieren eines synthetisierten Sicherungsfelds zu vermeiden und stattdessen auf das vorhandene Element zu verweisen, verwenden Sie stattdessen "this.field" oder ""@field.
  • CS9263: Eine partielle Eigenschaft kann nicht sowohl für die Definition als auch für die Implementierung einen Initialisierer haben.

Die folgenden Warnungen können für Feldsicherungseigenschaften generiert werden:

  • CS9264: Nicht nullable Eigenschaft muss beim Beenden des Konstruktors einen Wert ohne Null enthalten. Erwägen Sie das Hinzufügen des Modifizierers "erforderlich" oder das Deklarieren der Eigenschaft als Nullwerte oder das Hinzufügen von "[field: MaybeNull, AllowNull]"-Attributen.*
  • CS9266: Ein Accessor der Eigenschaft sollte "field" verwenden, da der andere Accessor es verwendet.

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 „partial“-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 mindestens einen Accessortext verfügen. Ab C# 13 können Sie das field Schlüsselwort verwenden, um einen Accessor mithilfe einer präzisen Syntax zu deklarieren:

public partial int ImplementingDeclaration { get => field; set; }

feldgesicherte Eigenschaften

  • CS9258: In dieser Sprachversion bindet das Schlüsselwort "field" an ein synthetisiertes Sicherungsfeld für die Eigenschaft. Um das Generieren eines synthetisierten Sicherungsfelds zu vermeiden und stattdessen auf das vorhandene Element zu verweisen, verwenden Sie stattdessen "this.field" oder ""@field.
  • CS9263: Eine partielle Eigenschaft kann nicht sowohl für die Definition als auch für die Implementierung einen Initialisierer haben.
  • CS9264: Nicht nullable Eigenschaft muss beim Beenden des Konstruktors einen Wert ohne Null enthalten. Erwägen Sie das Hinzufügen des Modifizierers "erforderlich" oder das Deklarieren der Eigenschaft als Nullwerte oder das Hinzufügen von "[field: MaybeNull, AllowNull]"-Attributen.*
  • CS9266: Ein Accessor der Eigenschaft sollte "field" verwenden, da der andere Accessor es verwendet.

Wichtig

Das field Schlüsselwort ist ein Vorschaufeature in C# 13. Sie müssen .NET 9 verwenden und das <LangVersion> Element preview in Der Projektdatei festlegen, um das field Kontextschlüsselwort zu verwenden.

Achten Sie darauf, die field Schlüsselwortfunktion in einer Klasse zu verwenden, die ein Feld mit dem Namen fieldhat. Das neue field Schlüsselwort schattiert ein Feld, das im Bereich eines Eigenschaftenaccessors benannt field ist. Sie können entweder den Namen der field Variablen ändern oder das @ Token verwenden, um auf den field Bezeichner zu verweisen als @field. Weitere Informationen erhalten Sie, indem Sie die Featurespezifikation für das field Schlüsselwort lesen.

Ab C# 13 können Sie mit der Vorschaufunktion gesicherte field Eigenschaften auf das compilersynthetisierte Sicherungsfeld für eine Eigenschaft zugreifen. CS9258 gibt an, dass Sie eine Variable mit dem Namen fieldhaben, die durch das Kontextschlüsselwort fieldausgeblendet werden kann.

CS9263 gibt an, dass Ihre deklarierende Deklaration eine Implementierung enthält. Diese Implementierung kann auf das compilersynthetisierte Sicherungsfeld für diese Eigenschaft zugreifen. CS9264 gibt an, dass die Verwendung von field angenommen wird, dass ein nicht nullwertes Sicherungsfeld verwendet wird, während die Eigenschaftsdeklaration nullfähig ist. Der Compiler geht davon aus, dass sowohl das Sicherungsfeld als auch die Eigenschaft die gleiche Nullierbarkeit aufweisen. Sie müssen das [field:MaybeNull, AllowNull] Attribut der Eigenschaftsdeklaration hinzufügen, um anzugeben, dass der field Wert als Nullwerte angesehen werden soll. CS9266 gibt an, dass eines der Eigenschaftenaccessoren das field Schlüsselwort verwendet, das andere jedoch ein hand deklariertes Sicherungsfeld verwendet. Die Warnung weist darauf hin, dass Sie dies versehentlich getan haben.