共用方式為


partial 類型和 partial 成員宣告相關的錯誤和警告

有許多與 partial 類型和 partial 成員宣告相關的錯誤

  • CS0260類型宣告中遺失部分修飾詞;但此類型的另一個部分宣告存在
  • CS0261:類型的部分宣告必須全部為類別、全部為結構,或全部為介面
  • CS0262類型的部分宣告有衝突的存取範圍修飾詞
  • CS0263類型的部分宣告不可指定不同的基底類別
  • CS0264類型的部分宣告必須有相同順序的相同類型參數名稱
  • CS0265類型的部分宣告對類型參數 'type parameter' 有不一致的條件約束
  • CS0267'partial' 修飾詞只能出現在 'class'、'record'、'struct'、'interface' 或方法或屬性傳回類型之前。
  • CS0282在多個部分類別或結構 'type' 的宣告中,欄位沒有明確的排序。要指定排序,所有執行個體欄位必須在同一個宣告中。
  • CS0501'member function' 不是標記成 abstractexternpartial,因此必須宣告主體
  • CS0750部分成員不能具有 'abstract' 修飾詞。
  • CS0751部分成員必須在部分 class 或部分 struct 中宣告
  • CS0754部分成員不可明確地實作介面方法。
  • CS0755兩個部分方法宣告必須都是擴充方法,或者都不是擴充方法。
  • CS0756部分方法不可有多重定義宣告。
  • CS0757部分方法不能有多重實作的宣告。
  • CS0759找不到用以實作部分方法宣告的定義宣告。
  • CS0761method<T> 的部分方法的宣告具有不一致的類型參數條件約束。
  • CS0762無法從方法建立委派,因為它是無實作宣告的部分方法
  • CS0763兩個部分方法宣告必須都是 static,或者都不是 static
  • CS0764兩個部分方法宣告必須都是 unsafe,或者都不是 unsafe
  • CS1067部分宣告必須有相同順序的相同類型參數名稱和變數修飾詞。
  • CS8142兩個部分成員宣告必須使用相同的元組元素名稱。
  • CS8663兩個部分成員宣告必須都使用唯讀修飾詞,或者都不使用唯讀修飾詞
  • CS8796部分方法必須具有存取修飾詞,因為它有非無效的傳回類型。
  • CS8795部分成員必須具有實作部分,因為它具有存取修飾詞。
  • CS8797部分方法必須具有存取修飾詞,因為它具有 'out' 參數。
  • CS8798部分方法必須具有存取修飾詞,因為它具有 'virtual'、'override'、'sealed'、'new' 或 'extern' 修飾詞。
  • CS8799兩個部分成員宣告必須具有相同的存取修飾詞。
  • CS8800兩個部分成員宣告必須具有相同的 virtualoverridesealednew 修飾詞組合。
  • CS8817兩個部分方法宣告必須具有相同的傳回類型。
  • CS8818部分成員宣告必須具有相符的 ref 傳回值。
  • CS8863只有單一部分類型宣告可以有參數清單
  • CS8988參數的 scoped 修飾詞與部分定義不相符。
  • CS9248部分屬性必須具有實作部分。
  • CS9249部分屬性必須具有定義部分。
  • CS9250部分屬性不能有多個定義宣告,並且不能是自動屬性。
  • CS9251部分屬性不能有多重實作的宣告
  • CS9252屬性存取子必須實作,因為它是在定義部分宣告的
  • CS9253屬性存取子未實作定義部分中宣告的任何存取子
  • CS9254屬性存取子必須與定義部分相符
  • CS9255兩個部分屬性宣告必須具有相同的類型。
  • CS9256部分屬性宣告的簽章不同。
  • CS9257兩個部分屬性宣告必須都為必要,或者都不為必要
  • CS9258在此語言版本中,'field' 關鍵詞會系結至屬性的合成支援字段。若要避免產生合成支援欄位,並參考現有的成員,請改用'this.field' 或 '@field' 。
  • CS9263部分屬性在定義和實作上都不能有初始化表達式。

您可以針對欄位支援的屬性產生下列警告:

  • CS9264結束建構函式時,不可為 Null 的屬性必須包含非 Null 值。請考慮新增 『required』 修飾詞,或將屬性宣告為可為 Null,或新增 『[field: MaybeNull, AllowNull]' 屬性。*
  • CS9266屬性的一個存取子應該使用 『field',因為另一個存取子正在使用它。

以下各節將說明這些錯誤和警告的原因及其修正方法。

部分型別

  • CS0260類型宣告中遺失部分修飾詞;但此類型的另一個部分宣告存在
  • CS0261:類型的部分宣告必須全部為類別、全部為結構,或全部為介面
  • CS0262類型的部分宣告有衝突的存取範圍修飾詞
  • CS0263類型的部分宣告不可指定不同的基底類別
  • CS0264類型的部分宣告必須有相同順序的相同類型參數名稱
  • CS0265類型的部分宣告對類型參數 'type parameter' 有不一致的條件約束
  • CS0267'partial' 修飾詞只能出現在 'class'、'record'、'struct'、'interface' 或方法或屬性傳回類型之前。
  • CS8863只有單一部分類型宣告可以有參數清單

您的部分類型宣告可能會導致編譯器發出以下警告:

  • CS0282在多個部分 classstruct 'type' 的宣告中,欄位沒有明確的排序。要指定排序,所有執行個體欄位必須在同一個宣告中。

對於任何部分類型,partial 關鍵字必須緊接在 classrecordstructinterface 之前。 如果它以任何其他順序出現,編譯器會發出錯誤。 此外:

  • 所有部分類型的宣告必須在類型 (classstructrecord classrecord structreadonly structreadonly record struct) 方面一致。
  • 所有宣告都必須包含 partial 修飾詞。
  • 泛型部分類型的宣告必須包含相同的類型參數,且順序必須一致。

宣告中的某些部分不需要在類型的所有宣告中重複。 然而,如果這些元素在多個 partial 宣告中重複,它們必須符合:

  • 任何存取修飾詞,例如 public
  • 任何基底類別或實作的介面。
  • 任何類型參數的條件約束

部分類型的宣告中最多只能宣告一次主要建構函式。

如果您在多個檔案中為 partial struct 類型宣告了多個欄位,編譯器會發出警告。 如果版面配置順序很重要,您必須在同一個檔案中宣告所有欄位。 如果順序不重要,您可以使用 System.Runtime.InteropServices.StructLayoutAttribute 搭配 LayoutKind.Auto 值。

部分成員

  • CS0750部分成員不能具有 'abstract' 修飾詞。
  • CS0751部分成員必須在部分 class 或部分 struct 中宣告
  • CS0754部分成員不可明確地實作介面方法。
  • CS0763兩個部分方法宣告必須都是 static,或者都不是 static
  • CS0764兩個部分方法宣告必須都是 unsafe,或者都不是 unsafe
  • CS8142兩個部分成員宣告必須使用相同的元組元素名稱。
  • CS8663兩個部分成員宣告必須都使用唯讀修飾詞,或者都不使用唯讀修飾詞
  • CS8799兩個部分成員宣告必須具有相同的存取修飾詞。
  • CS8800兩個部分成員宣告必須具有相同的 virtualoverridesealednew 修飾詞組合。
  • CS8818部分成員宣告必須具有相符的 ref 傳回值。
  • CS8988參數的 scoped 修飾詞與部分定義不相符。

部分成員有兩個宣告。 沒有實作的宣告是宣告宣告。 具有實作的宣告是實作宣告。 部分成員僅允許在 partial 類型中。 部分成員不能是 abstract。 部分成員不能明確實作介面。 部分成員的兩個宣告必須具有相同的簽章。 例如,兩個宣告不是都包含 staticunsafe 修飾詞,就是都不包含。

部分方法

  • CS0501'member function' 不是標記成 abstractexternpartial,因此必須宣告主體
  • CS0755兩個部分方法宣告必須都是擴充方法,或者都不是擴充方法。
  • CS0756部分方法不可有多重定義宣告。
  • CS0757部分方法不能有多重實作的宣告。
  • CS0759找不到用以實作部分方法宣告的定義宣告。
  • CS0761method<T> 的部分方法的宣告具有不一致的類型參數條件約束。
  • CS0762無法從方法建立委派,因為它是無實作宣告的部分方法
  • CS1067部分宣告必須有相同順序的相同類型參數名稱和變數修飾詞。
  • CS8796部分方法必須具有存取修飾詞,因為它有非無效的傳回類型。
  • CS8795部分成員必須具有實作部分,因為它具有存取修飾詞。
  • CS8797部分方法必須具有存取修飾詞,因為它具有 'out' 參數。
  • CS8798部分方法必須具有存取修飾詞,因為它具有 'virtual'、'override'、'sealed'、'new' 或 'extern' 修飾詞。
  • CS8817兩個部分方法宣告必須具有相同的傳回類型。

某些 partial 方法宣告不需要實作宣告。 也就是說,如果該成員傳回 void,未宣告任何存取修飾詞(包括預設的 private 修飾詞),並且不包含任何 virtualoverridesealednew 修飾詞。 否則,任何部分方法必須包含宣告宣告和實作宣告。

當部分方法包含實作宣告時,兩個宣告必須完全相同。 只能定義一個實作宣告。

部分屬性

以下錯誤表示部分屬性或索引器宣告中的錯誤:

  • CS9248部分屬性必須具有實作部分。
  • CS9249部分屬性必須具有定義部分。
  • CS9250部分屬性不能有多個定義宣告,並且不能是自動屬性。
  • CS9251部分屬性不能有多重實作的宣告
  • CS9252屬性存取子必須實作,因為它是在定義部分宣告的
  • CS9253屬性存取子未實作定義部分中宣告的任何存取子
  • CS9254屬性存取子必須與定義部分相符
  • CS9255兩個部分屬性宣告必須具有相同的類型。
  • CS9257兩個部分屬性宣告必須都為必要,或者都不為必要

以下警告表示部分屬性中宣告宣告和實作宣告的簽章差異:

  • CS9256部分屬性宣告的簽章不同。

部分屬性或索引器必須同時 具有宣告宣告實作宣告。 兩個宣告的簽章必須一致。 由於宣告宣告使用與自動實作屬性相同的語法,因此實作宣告不能是自動實作的屬性。 存取子必須至少有一個存取子主體。 從 C# 13 開始,您可以使用 field 關鍵詞,使用簡潔的語法來宣告一個存取子:

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

欄位支援的屬性

  • CS9258在此語言版本中,'field' 關鍵詞會系結至屬性的合成支援字段。若要避免產生合成支援欄位,並參考現有的成員,請改用'this.field' 或 '@field' 。
  • CS9263部分屬性在定義和實作上都不能有初始化表達式。
  • CS9264結束建構函式時,不可為 Null 的屬性必須包含非 Null 值。請考慮新增 『required』 修飾詞,或將屬性宣告為可為 Null,或新增 『[field: MaybeNull, AllowNull]' 屬性。*
  • CS9266屬性的一個存取子應該使用 『field',因為另一個存取子正在使用它。

重要

關鍵詞 field 是 C# 13 中的預覽功能。 您必須使用 .NET 9,並將項目 <LangVersion> 檔中的 元素設定為 preview ,才能使用 field 內容關鍵詞。

您應該小心在 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 表示其中一個屬性存取子使用 field 關鍵詞,但另一個屬性存取子使用手動宣告的備份欄位。 警告表示您可能偶然這麼做。