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
oderpartial
markiert ist - CS0750: Partielle Member dürfen nicht den Modifizierer „
abstract
“ aufweisen. - CS0751: Partielle Member müssen in einem partiellen
class
oder einem partiellenstruct
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 darfstatic
sein. - CS0764: Beide partiellen Methodendeklarationen müssen
unsafe
sein, oder keine von beiden darfunsafe
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
undnew
-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
oderstruct
„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
oderreadonly 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 partiellenstruct
deklariert werden - CS0754: Ein partieller Member darf keine Schnittstellenmethoden explizit implementieren.
- CS0763: Beide partiellen Methodendeklarationen müssen
static
sein, oder keine von beiden darfstatic
sein. - CS0764: Beide partiellen Methodendeklarationen müssen
unsafe
sein, oder keine von beiden darfunsafe
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
- undnew
-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
oderpartial
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 field
hat. 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 field
haben, die durch das Kontextschlüsselwort field
ausgeblendet 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.