與
有許多與 類型和 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: 部分屬性在定義和實作上都不能有初始化表達式。
- CS9275: 部分成員必須具有實作元件。
- CS9276: 部分成員必須具有定義元件。
- CS9277: 部分成員不允許有多個定義宣告。
- CS9278: 部分成員可能沒有多個實作宣告。
- CS9279: 部分事件不能有初始化表達式。
- CS9280: 只有部分建構函式的實作宣告可以有初始化表達式。
您可以針對欄位支援的屬性產生下列警告:
-
CS9264: 結束建構函式時,不可為 Null 的屬性必須包含非 Null 值。請考慮新增 『required』 修飾詞,或將屬性宣告為可為 Null,或新增 『
[field: MaybeNull, AllowNull]' 屬性。* -
CS9266: 屬性的一個存取子應該使用 『
field',因為另一個存取子正在使用它。 -
CS9273: 在此語言版本中,'
field' 是屬性存取子內的關鍵詞。請重新命名變數,或使用標識碼 『@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修飾詞與部分定義不相符。 - CS9275: 部分成員必須具有實作元件。
- CS9276: 部分成員必須具有定義元件。
- CS9277: 部分成員不得有多個定義宣告。
- CS9278:部分成員不可有多個實作宣告。
部分成員必須有兩個宣告。 沒有實作的宣告是 定義宣告。 具有實作的宣告是實作宣告。 這兩個宣告都是必要的。 部分成員僅允許在 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 修飾詞。 否則,任何部分方法必須包含宣告宣告和實作宣告。
當部分方法包含實作宣告時,兩個宣告必須完全相同。 只能定義一個實作宣告。
當您有實作宣告 (具有主體的部分方法),但沒有對應的定義宣告 (沒有主體的方法簽章) 時,就會發生 CS0759 。 具有實作的每個部分方法都必須有這兩個宣告。
下列範例顯示產生 CS0759 的程式代碼:
// This will cause CS0759: No defining declaration found for implementing declaration of partial method.
// Uncomment the class below to see the CS0759 error:
/*
public partial class ExampleClass
{
// ERROR: This is an implementing declaration without a corresponding defining declaration
partial void MyMethod() // CS0759
{
Console.WriteLine("Implementation without definition");
}
}
*/
若要修正此錯誤,請新增定義宣告:
// Correct way: Provide both the defining declaration and implementing declaration
public partial class CorrectExampleClass
{
// Defining declaration (signature without body)
partial void MyMethod();
}
public partial class CorrectExampleClass
{
// Implementing declaration (signature with body)
partial void MyMethod()
{
Console.WriteLine("This works correctly");
}
}
您也可以將這兩個宣告放在相同的部分類別區段中:
// Alternative correct approach: defining and implementing in same partial class
public partial class AlternativeExampleClass
{
// Defining declaration
partial void MyMethod();
// Implementing declaration in same partial class section
partial void MyMethod()
{
Console.WriteLine("This also works correctly");
}
}
部分屬性
以下錯誤表示部分屬性或索引器宣告中的錯誤:
- CS9248:部分屬性必須具有實作部分。
- CS9249:部分屬性必須具有定義部分。
- CS9250:部分屬性不能有多個定義宣告,並且不能是自動屬性。
- CS9251:部分屬性不能有多重實作的宣告
- CS9252:屬性存取子必須實作,因為它是在定義部分宣告的
- CS9253:屬性存取子未實作定義部分中宣告的任何存取子
- CS9254:屬性存取子必須與定義部分相符
- CS9255:兩個部分屬性宣告必須具有相同的類型。
- CS9257:兩個部分屬性宣告必須都為必要,或者都不為必要
以下警告表示部分屬性中宣告宣告和實作宣告的簽章差異:
- CS9256:部分屬性宣告的簽章不同。
部分屬性或索引器必須同時 具有宣告宣告 和 實作宣告。 兩個宣告的簽章必須一致。
由於宣告宣告使用與自動實作屬性相同的語法,因此實作宣告不能是自動實作的屬性。 存取子必須至少有一個存取子主體。 從 C# 13 開始,您可以使用 field 關鍵詞,使用簡潔的語法來宣告一個存取子:
public partial int ImplementingDeclaration { get => field; set; }
部分事件和建構函式
- CS9279: 部分事件不能有初始化表達式。
- CS9280: 只有部分建構函式的實作宣告可以有初始化表達式。
你在部分建構子的定義宣告或部分事件宣告上宣告初始化器。 您必須將其移除。
欄位支援的屬性
-
CS9258: 在此語言版本中,'
field' 關鍵詞會系結至屬性的合成支援字段。若要避免產生合成支援欄位,並參考現有的成員,請改用'this.field' 或 '@field' 。 - CS9263: 部分屬性在定義和實作上都不能有初始化表達式。
-
CS9264: 結束建構函式時,不可為 Null 的屬性必須包含非 Null 值。請考慮新增 『required』 修飾詞,或將屬性宣告為可為 Null,或新增 『
[field: MaybeNull, AllowNull]' 屬性。* -
CS9266: 屬性的一個存取子應該使用 『
field',因為另一個存取子正在使用它。 -
CS9273: 在此語言版本中,'
field' 是屬性存取子內的關鍵詞。請重新命名變數,或使用標識碼 『@field。
從 C# 14 開始,field 具備 backing 的屬性允許你存取編譯器合成的後設欄位。
CS9258 或 CS9273 表示您有名為 field的變數,此變數可由內容關鍵詞 field隱藏。
CS9263 表示宣告包含 實作。 該實作可能會存取該屬性的編譯程式合成支援欄位。
CS9264 表示在您使用 field 時假設了一個不可空的後端欄位,但屬性宣告是可空的。 編譯程式假設支援欄位和屬性具有相同的可為 Null 性。 您必須將 [field:MaybeNull, AllowNull] 屬性新增至屬性宣告,以 field 指出值應該視為可為 Null。
CS9266 表示一個屬性的存取者使用關鍵字 field ,但另一個則使用手動宣告的背景欄位。 警告顯示這可能是錯誤。