與 partial
類型和 partial
成員宣告相關的錯誤和警告
有許多與 partial
類型和 partial
成員宣告相關的錯誤:
- CS0260:類型宣告中遺失部分修飾詞;但此類型的另一個部分宣告存在
- CS0261::類型的部分宣告必須全部為類別、全部為結構,或全部為介面
- CS0262:類型的部分宣告有衝突的存取範圍修飾詞
- CS0263:類型的部分宣告不可指定不同的基底類別
- CS0264:類型的部分宣告必須有相同順序的相同類型參數名稱
- CS0265:類型的部分宣告對類型參數 'type parameter' 有不一致的條件約束
- CS0267:'
partial
' 修飾詞只能出現在 'class
'、'record
'、'struct
'、'interface
' 或方法或屬性傳回類型之前。 - CS0282:在多個部分類別或結構 'type' 的宣告中,欄位沒有明確的排序。要指定排序,所有執行個體欄位必須在同一個宣告中。
- CS0501:'member function' 不是標記成
abstract
、extern
或partial
,因此必須宣告主體 - CS0750:部分成員不能具有 '
abstract
' 修飾詞。 - CS0751:部分成員必須在部分
class
或部分struct
中宣告 - CS0754:部分成員不可明確地實作介面方法。
- CS0755:兩個部分方法宣告必須都是擴充方法,或者都不是擴充方法。
- CS0756:部分方法不可有多重定義宣告。
- CS0757:部分方法不能有多重實作的宣告。
- CS0759:找不到用以實作部分方法宣告的定義宣告。
- CS0761:
method<T>
的部分方法的宣告具有不一致的類型參數條件約束。 - CS0762:無法從方法建立委派,因為它是無實作宣告的部分方法
- CS0763:兩個部分方法宣告必須都是
static
,或者都不是static
。 - CS0764:兩個部分方法宣告必須都是
unsafe
,或者都不是unsafe
- CS1067:部分宣告必須有相同順序的相同類型參數名稱和變數修飾詞。
- CS8142:兩個部分成員宣告必須使用相同的元組元素名稱。
- CS8663:兩個部分成員宣告必須都使用唯讀修飾詞,或者都不使用唯讀修飾詞
- CS8796:部分方法必須具有存取修飾詞,因為它有非無效的傳回類型。
- CS8795:部分成員必須具有實作部分,因為它具有存取修飾詞。
- CS8797:部分方法必須具有存取修飾詞,因為它具有 '
out
' 參數。 - CS8798:部分方法必須具有存取修飾詞,因為它具有 '
virtual
'、'override
'、'sealed
'、'new
' 或 'extern
' 修飾詞。 - CS8799:兩個部分成員宣告必須具有相同的存取修飾詞。
- CS8800:兩個部分成員宣告必須具有相同的
virtual
、override
、sealed
和new
修飾詞組合。 - 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:在多個部分
class
或struct
'type' 的宣告中,欄位沒有明確的排序。要指定排序,所有執行個體欄位必須在同一個宣告中。
對於任何部分類型,partial
關鍵字必須緊接在 class
、record
、struct
或 interface
之前。 如果它以任何其他順序出現,編譯器會發出錯誤。 此外:
- 所有部分類型的宣告必須在類型 (
class
、struct
、record class
、record struct
、readonly struct
或readonly 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:兩個部分成員宣告必須具有相同的
virtual
、override
、sealed
和new
修飾詞組合。 - CS8818:部分成員宣告必須具有相符的
ref
傳回值。 - CS8988:參數的
scoped
修飾詞與部分定義不相符。
部分成員有兩個宣告。 沒有實作的宣告是宣告宣告。 具有實作的宣告是實作宣告。 部分成員僅允許在 partial
類型中。 部分成員不能是 abstract
。 部分成員不能明確實作介面。 部分成員的兩個宣告必須具有相同的簽章。 例如,兩個宣告不是都包含 static
或 unsafe
修飾詞,就是都不包含。
部分方法
- CS0501:'member function' 不是標記成
abstract
、extern
或partial
,因此必須宣告主體 - CS0755:兩個部分方法宣告必須都是擴充方法,或者都不是擴充方法。
- CS0756:部分方法不可有多重定義宣告。
- CS0757:部分方法不能有多重實作的宣告。
- CS0759:找不到用以實作部分方法宣告的定義宣告。
- CS0761:
method<T>
的部分方法的宣告具有不一致的類型參數條件約束。 - CS0762:無法從方法建立委派,因為它是無實作宣告的部分方法
- CS1067:部分宣告必須有相同順序的相同類型參數名稱和變數修飾詞。
- CS8796:部分方法必須具有存取修飾詞,因為它有非無效的傳回類型。
- CS8795:部分成員必須具有實作部分,因為它具有存取修飾詞。
- CS8797:部分方法必須具有存取修飾詞,因為它具有 '
out
' 參數。 - CS8798:部分方法必須具有存取修飾詞,因為它具有 '
virtual
'、'override
'、'sealed
'、'new
' 或 'extern
' 修飾詞。 - CS8817:兩個部分方法宣告必須具有相同的傳回類型。
某些 partial
方法宣告不需要實作宣告。 也就是說,如果該成員傳回 void
,未宣告任何存取修飾詞(包括預設的 private
修飾詞),並且不包含任何 virtual
、override
、sealed
或 new
修飾詞。 否則,任何部分方法必須包含宣告宣告和實作宣告。
當部分方法包含實作宣告時,兩個宣告必須完全相同。 只能定義一個實作宣告。
部分屬性
以下錯誤表示部分屬性或索引器宣告中的錯誤:
- 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
關鍵詞,但另一個屬性存取子使用手動宣告的備份欄位。 警告表示您可能偶然這麼做。