次の方法で共有


partial 型と partial メンバー宣言に関連するエラーと警告

partial 型と partial メンバー宣言に関するエラーはたくさんあります。

  • CS0260: partial 修飾子が type 宣言にありません。この型の別の部分宣言が存在します。
  • CS0261: 型の部分宣言は、すべて、クラス、構造体、またはインターフェイスのいずれかに統一する必要があります
  • CS0262: 型の部分宣言に競合するアクセシビリティ修飾子が含まれています
  • CS0263: 型の部分宣言に異なる基底クラスが指定されていません
  • CS0264: 型の部分宣言には、同じ順序で、同じ type パラメータ名を指定する必要があります。
  • CS0265: 型の部分宣言に、型パラメータ「type parameter」に対して矛盾する制約が含まれています
  • CS0267: 'partial' 修飾子は、'class'、'record'、'struct'、'interface'、あるいはメソッドまたはプロパティの戻り値の型の直前にのみ使用できます。
  • CS0282: 部分クラスまたは構造体「type」の複数の宣言内のフィールド間の順序は定義されていません。順序を指定するには、すべてのインスタンス フィールドが同じ宣言に含まれている必要があります。
  • CS0501: 「member function」は、abstractextern または partial とマークされていないため本文を宣言する必要があります。
  • CS0750: partial メンバーに、「abstract」修飾子を指定できません。
  • CS0751: partial メンバーは、class partial または partialstruct で宣言する必要があります。
  • CS0754: partial メンバー は、interface メソッドで明示的に実装できない場合があります。
  • CS0755: partial メソッド宣言は両方とも、extension メソッドにするか、両方とも extension メソッドにしないようにします。
  • CS0756: partial メソッドには、複数定義宣言を指定できません。
  • CS0757: partial メソッドには、複数実装宣言を指定できません。
  • CS0759: partial メソッドの実装宣言に対して定義宣言が見つかりませんでした。
  • CS0761: method<T> の partial メソッド宣言に、一貫性のない型パラメータ制約があります。
  • CS0762: delegate from メソッドは、実装宣言が無い partial メソッドであるため、delegate from メソッドを作成できません
  • CS0763: partial メソッド宣言の両方とも static にするか、両方とも static にしないようにします。
  • CS0764: partial メソッド宣言の両方とも unsafe にするか、両方とも unsafe にしないようにします。
  • CS1067: 部分宣言には、同じ順序で、同じ type パラメータ名と variance 修飾子を指定する必要があります。
  • CS8142: partial メンバー宣言の両方には、同じタプル要素名を使用する必要があります。
  • CS8663: partial メンバー宣言の両方を読み取り専用にするか、両方を読み取り専用にすることはできません
  • CS8796: partial メソッドには、非 void 型 return type があるため、accessibility 修飾子にする必要があります。
  • CS8795: partial メンバー には、accessibility 修飾子があるため、実装部分が必要です。
  • CS8797: partial メソッドには、「out」パラメータがあるため、accessibility 修飾子が必要です。
  • CS8798: partial メソッドには、「virtual」、「override」、「sealed」、「new」、「extern」修飾子があるため accessibility 修飾子が必要です。
  • CS8799: 両方の partial メンバー宣言には、同じ accessibility 修飾子が必要です。
  • CS8800: 両方の partial メンバー宣言には、virtualoverridesealednew 修飾子の同じ組み合わせが必要です。
  • CS8817: 両方の partial メソッド宣言には、同じ return type が必要です。
  • CS8818: partial メンバー宣言には、一致する ref 戻り値が必要です。
  • CS8863: 単一の partial 型宣言のみがパラメータ リストを持つことができます
  • CS8988: パラメータの scoped 修飾子には、一致する部分定義がありません。
  • CS9248: partial プロパティには実装部分が必要です。
  • CS9249: partial プロパティには定義部分が必要です。
  • CS9250: partial プロパティには、複数定義宣言が無い場合があり、自動プロパティにできません。
  • CS9251: partial プロパティには、複数実装宣言を指定できない場合があります。
  • CS9252: property アクセサーは定義部分で宣言されているため、実装する必要があります
  • CS9253: property アクセサーは、定義部分で宣言されたアクセサーを実装しません
  • CS9254: property アクセサーが定義部分と一致する必要があります
  • CS9255: 両方の partial プロパティ宣言は同じ型である必要があります。
  • CS9256: partial プロパティ宣言には署名の違いがあります。
  • CS9257: partial プロパティ宣言を両方とも必須にする必要があります。また、両方とも必須でない場合もあります。
  • CS9258: この言語バージョンでは、'field' キーワードは、プロパティの合成されたバッキング フィールドにバインドされます。合成されたバッキング フィールドが生成されないようにし、既存のメンバーを参照するには、代わりに 'this.field' または '@field' を使用します。
  • CS9263: A 部分プロパティは、定義と実装の両方で初期化子を持つことはできません。

フィールドに基づくプロパティに対して、次の警告を生成できます。

  • CS9264: 非 null 許容プロパティは、コンストラクターを終了するときに null 以外の値を含める必要があります。'required' 修飾子を追加するか、プロパティを null 許容として宣言するか、'[field: MaybeNull, AllowNull]' 属性を追加することを検討してください。*
  • CS9266: 他のアクセサーが使用しているため、プロパティの 1 つのアクセサーは 'field' を使用する必要があります。

次のセクションでは、これらのエラーと警告の原因と修正について説明します。

部分型

  • CS0260: partial 修飾子が type 宣言にありません。この型の別の部分宣言が存在します。
  • CS0261: 型の部分宣言は、すべて、クラス、構造体、またはインターフェイスのいずれかに統一する必要があります
  • CS0262: 型の部分宣言に競合するアクセシビリティ修飾子が含まれています
  • CS0263: 型の部分宣言に異なる基底クラスが指定されていません
  • CS0264: 型の部分宣言には、同じ順序で、同じ type パラメータ名を指定する必要があります。
  • CS0265: 型の部分宣言に、型パラメータ「type parameter」に対して矛盾する制約が含まれています
  • CS0267: 'partial' 修飾子は、'class'、'record'、'struct'、'interface'、あるいはメソッドまたはプロパティの戻り値の型の直前にのみ使用できます。
  • CS8863: 単一の partial 型宣言のみがパラメータ リストを持つことができます

partial 型宣言により、コンパイラは次の警告を出力する可能性があります。

  • CS0282: partial class または struct「type」の複数の宣言内のフィールド間の順序は定義されていません。順序を指定するには、すべてのインスタンス フィールドが同じ宣言に含まれている必要があります。

partial 型の場合、partial キーワードは、classrecordstruct、または interface の直前に置く必要があります。 コンパイラは、他の順序で表示される場合にエラーを出力します。 さらに:

  • partial 型のすべての宣言は、型の観点で一致する必要があります (classstructrecord classrecord structreadonly struct、または readonly record struct)。
  • すべての宣言には、partial 修飾子を含める必要があります。
  • ジェネリック部分型の宣言には、同じ順序で同じ型パラメーターを含める必要があります。

宣言の一部は、型のすべての宣言で繰り返す必要はありません。 ただし、これらの要素が複数の partial 宣言で繰り返される場合は、次と一致する必要があります。

  • public などのアクセス修飾子。
  • 任意の基底クラスまたは実装されたインターフェイス。
  • 型パラメーターの制約。

プライマリ コンストラクターは、partial 型に対して最大 1 つの宣言で宣言できます。

partial struct 型の複数のファイルで複数のフィールドが宣言されている場合、コンパイラから警告が表示されます。 レイアウト順序が重要な場合は、同じファイル内のすべてのフィールドを宣言する必要があります。 順序が重要ではない場合は、LayoutKind.Auto 値で System.Runtime.InteropServices.StructLayoutAttribute を使用できます。

partial メンバー

  • CS0750: partial メンバーには、「abstract」修飾子を指定できません。
  • CS0751: partial メンバーは、class partial または partialstruct で宣言する必要があります。
  • CS0754: partial メンバーは、interface メソッドで明示的に実装できない場合があります。
  • CS0763: partial メンバー宣言の両方を static にするか、両方とも static にしないようにします。
  • CS0764: partial メソッド宣言を両方とも unsafe にするか unsafe にしないようにする必要があります。
  • CS8142: partial メンバー宣言の両方には、同じタプル要素名を使用する必要があります。
  • CS8663: partial メンバー宣言の両方を読み取り専用にするか、両方を読み取り専用にすることはできません
  • CS8799: 両方の partial メンバー宣言には、同じ accessibility 修飾子が必要です。
  • CS8800: 両方の partial メンバー宣言には、virtualoverridesealed およびnew 修飾子の同じ組み合わせが必要です。
  • CS8818: partial メンバー宣言には、一致する ref 戻り値が必要です。
  • CS8988: パラメータの scoped 修飾子に一致する部分定義がありません。

partial メンバーには、2 つの宣言があります。 実装のない宣言は、 declaring 宣言です。 実装がある宣言は、implementing 宣言です。 partial メンバーは、partial 型のみで使用できます。 partial メンバーを abstract できません。 partial メンバーは、インターフェイスで明示的に実装できません。 partial メンバーの両方の宣言には、同一署名が必要です。 たとえば、両方の宣言に、static または unsafe 修飾子を含めるか含めないかを指定します。

部分メソッド

  • CS0501: 「member function」はabstractexternpartial でマークされていないため、本文を宣言する必要があります。
  • CS0755: 両方の partial メソッド宣言は extension メソッドにするか、両方とも extension メソッドにしないようにします。
  • CS0756: partial メソッドには、複数定義宣言を指定できません。
  • CS0757: partial メソッドには、複数実装宣言を指定できません。
  • CS0759: partial メソッドの実装宣言に対して定義宣言が見つかりませんでした。
  • CS0761: method<T> の partial メソッド宣言に、一貫性のない型パラメータ制約があります。
  • CS0762: delegate from メソッドは、実装宣言が無い partial メソッドであるため、delegate from メソッドを作成できません
  • CS1067: 部分宣言には、同じ順序で、同じ type パラメータ名と variance 修飾子を指定する必要があります。
  • CS8796: partial メソッドには、非 void 型 return type があるため、accessibility 修飾子にする必要があります。
  • CS8795: partial メンバー には、accessibility 修飾子があるため、実装部分が必要です。
  • CS8797: partial メソッドには、「out」パラメータがあるため、accessibility 修飾子が必要です。
  • CS8798: partial メソッドには、「virtual」、「override」、「sealed」、「new」、「extern」修飾子があるため accessibility 修飾子が必要です。
  • CS8817: 両方の partial メソッド宣言には、同じ return type が必要です。

特定の partial メソッド宣言では、実装宣言は必要ありません。 つまり、メンバーが voidを返す場合、アクセス修飾子 (既定の private 修飾子を含む) は宣言せず、virtualoverridesealed、または new 修飾子は含まれません。 それ以外の場合、partial メソッドには declaring と implementing 宣言の両方を含める必要があります。

partial メソッドに、implementing 宣言が含まれる場合両方の宣言は同一である必要があります。 implementing 宣言を 1 つだけ定義できます。

partial プロパティ

次のエラーは、partial プロパティまたはインデクサー宣言の間違いを示しています。

  • CS9248: partial プロパティには実装部分が必要です。
  • CS9249: partial プロパティには定義部分が必要です。
  • CS9250: partial プロパティには、複数定義宣言が無い場合があり、自動プロパティにできません。
  • CS9251: partial プロパティには、複数実装宣言を指定できない場合があります。
  • CS9252: property アクセサーは定義部分で宣言されているため、実装する必要があります
  • CS9253: property アクセサーは、定義部分で宣言されたアクセサーを実装しません
  • CS9254: property アクセサーが定義部分と一致する必要があります
  • CS9255: 両方の partial プロパティ宣言は同じ型である必要があります。
  • CS9257: 両方の partial プロパティ宣言を必須にするか必須にしないかにする必要があります。

次の警告は、partial プロパティの declaring 宣言と implementing 宣言の署名の違いを示しています。

  • CS9256: partial プロパティ宣言には署名の違いがあります。

partial プロパティまたはインデクサーには、declaring 宣言implementing 宣言の両方があります。 両方の宣言の署名が一致している必要があります。 宣言は自動的に実装されるプロパティと同じ構文を使用するため、実装宣言は自動的に実装されるプロパティにすることはできません。 アクセサーには、少なくとも 1 つのアクセサー本体が必要です。 C# 13 以降では、 field キーワードを使用して、簡潔な構文を使用して 1 つのアクセサーを宣言できます。

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

フィールドに基づくプロパティ

  • CS9258: この言語バージョンでは、'field' キーワードは、プロパティの合成されたバッキング フィールドにバインドされます。合成されたバッキング フィールドの生成を回避し、既存のメンバーを参照するには、代わりに 'this.field' または '@field' を使用します。
  • CS9263: 部分プロパティは、定義と実装の両方に初期化子を持つことはできません。
  • CS9264: 非 null 許容プロパティは、コンストラクターを終了するときに null 以外の値を含める必要があります。'required' 修飾子を追加するか、プロパティを null 許容として宣言するか、'[field: MaybeNull, AllowNull]' 属性を追加することを検討してください。*
  • CS9266: 他のアクセサーが使用しているため、プロパティの 1 つのアクセサーは 'field' を使用する必要があります。

重要

field キーワードは、C# 13 のプレビュー機能です。 fieldコンテキスト キーワードを使用するには、.NET 9 を使用し、<LangVersion>要素をプロジェクト ファイルにpreviewするように設定する必要があります。

field という名前のフィールドがあるクラスでは、field キーワード機能を使用する場合は注意が必要です。 新しい field キーワードは、プロパティ アクセサーのスコープ内の field という名前のフィールドをシャドウします。 field変数の名前を変更するか、@ トークンを使用してfield識別子を@fieldとして参照できます。 詳細については、field キーワード機能の仕様を参照してください。

C# 13 以降のプレビュー機能では、 field に基づくプロパティを使用して、プロパティのコンパイラ合成バッキング フィールドにアクセスできます。 CS9258 は、 fieldという名前の変数があることを示します。これは、コンテキスト キーワード fieldで非表示にすることができます。

CS9263 は、宣言宣言に実装が含まれていることを示します。 その実装では、そのプロパティのコンパイラ合成バッキング フィールドにアクセスしている可能性があります。 CS9264 は、プロパティ宣言が null 許容である間、 field の使用が null 非許容バッキング フィールドを想定していることを示します。 コンパイラは、バッキング フィールドとプロパティの両方が同じ null 許容を持っていることを前提としています。 [field:MaybeNull, AllowNull]属性をプロパティ宣言に追加して、field値を null 許容と見なす必要があることを示す必要があります。 CS9266 は、プロパティ アクセサーの 1 つが field キーワードを使用し、もう 1 つは手動で宣言されたバッキング フィールドを使用することを示します。 警告は、誤って行った可能性があることを示します。