与
有许多与 类型和 partial 成员声明相关的partial:
- CS0260:类型为“type”的声明上缺少分部修饰符;存在此类型的其他分部声明
- CS0261:“type”的分部声明必须是所有的类、所有的结构或所有的接口
- CS0262:“type”的分部声明包含冲突的可访问性修饰符
- CS0263:“type”的分部声明必须指定相同的基类
- CS0264:“type”的分部声明必须具有顺序相同的相同类型形参名
- CS0265:“type”的分部声明对类型参数“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和sealednew修饰符组合。 - 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 值。请考虑添加“必需”修饰符,或将属性声明为可为 null,或添加“
[field: MaybeNull, AllowNull]”属性。* -
CS9266: 属性的一个访问器应使用“”
field,因为另一个访问器正在使用它。 -
CS9273: 在此语言版本中,“”
field是属性访问器中的关键字。重命名变量或使用标识符“@field”来改用。
以下部分介绍了这些错误和警告的原因和修复。
分部类型
- CS0260:类型为“type”的声明上缺少分部修饰符;存在此类型的其他分部声明
- CS0261:“type”的分部声明必须是所有的类、所有的结构或所有的接口
- CS0262:“type”的分部声明包含冲突的可访问性修饰符
- CS0263:“type”的分部声明必须指定相同的基类
- CS0264:“type”的分部声明必须具有顺序相同的相同类型形参名
- CS0265:“type”的分部声明对类型参数“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 值。请考虑添加“必需”修饰符,或将属性声明为可为 null,或添加“
[field: MaybeNull, AllowNull]”属性。* -
CS9266: 属性的一个访问器应使用“”
field,因为另一个访问器正在使用它。 -
CS9273: 在此语言版本中,“”
field是属性访问器中的关键字。重命名变量或使用标识符“@field”来改用。
从 C# 14 开始,field 后备属性允许访问编译器生成的属性后备字段。
CS9258 或 CS9273 指示你有一个名为的变量,该变量 field可由上下文关键字 field隐藏。
CS9263 指示声明包括实现。 该实现可能正在访问该属性的编译器合成后盾字段。
CS9264 指示在 field 属性声明可为 null 时使用假定不可为 null 的后盾字段。 编译器假定后备字段和属性具有相同的可为 null 性。 需要将 [field:MaybeNull, AllowNull] 属性添加到属性声明,以 field 指示值应被视为可为 null。
CS9266 指示某个属性的访问器使用 field 关键字,但另一个使用手动声明的后盾字段。 该警告表明可能是一个错误。