partial 类型和 partial 成员声明相关的错误和警告

可能会遇到与partial类型和partial成员声明相关的以下错误:

  • CS0260类型为“type”的声明上缺少分部修饰符;存在此类型的其他分部声明
  • CS0261“type”的分部声明必须是所有的类、所有的结构或所有的接口
  • CS0262“type”的分部声明包含冲突的可访问性修饰符
  • CS0263“type”的分部声明必须指定相同的基类
  • CS0264“type”的分部声明必须具有顺序相同的相同类型形参名
  • CS0265“type”的分部声明对类型参数“type parameter”具有不一致的约束
  • CS0267partial”修饰符只能出现在紧靠“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必须同时要求这两个分部属性声明,或者都不需要这两个声明
  • CS9275部分成员必须具有实现部分。
  • CS9276部分成员必须具有定义部件。
  • CS9277部分成员可能没有多个定义声明。
  • CS9278部分成员可能没有多个实现声明。
  • CS9279部分事件不能有初始化器。
  • CS9280只有部分构造函数的实现声明才能具有初始值设定项。

以下部分介绍了这些错误和警告的原因和修复。

分部类型

  • CS0260缺少类型声明的部分修饰符;此类型的另一个部分声明存在
  • CS0261类型的部分声明必须是所有类、所有结构或所有接口
  • CS0262类型的部分声明具有冲突的辅助功能修饰符
  • CS0263类型部分声明不得指定不同的基类
  • CS0264类型的分部声明必须具有相同的类型参数名称,顺序相同
  • CS0265类型的部分声明对类型参数“type parameter”具有不一致的约束
  • CS0267partial修饰符只能在”class“、”recordstructinterface或方法或属性返回类型之前立即显示。
  • CS8863只有单个分部类型声明可能具有参数列表

你的分部类型声明可能会导致编译器发出以下警告:

  • CS0282:在部分classstruct“type”的多个声明中,字段之间没有定义的排序。若要指定排序,所有实例字段必须位于同一个声明中。

分部类型声明 违反分部类型的规则时,会发生这些错误。

  • partial 修饰符添加到类型的所有声明,因为一旦跨多个声明拆分类型,每个部分都必须包含关键字(CS0260)。
  • 确保所有声明都使用相同的类型关键字,因为不允许在同一类型的不同部分混合classstructrecordinterface混合(CS0261)。 应确保所有声明(例如使所有部分 public 或所有部件 internal)的访问修饰符保持一致,因为不同声明上的冲突可访问性会产生有关类型预期可见性(CS0262)的歧义性。
  • 验证所有声明都指定相同的基类,因为类型只能继承自一个基类,因此多个不同的基类冲突(CS0263)。
  • 对于泛型分部类型,请确保所有声明按相同顺序列出相同的类型参数,因为类型参数名称必须完全匹配所有部分(CS0264)。
  • 验证类型参数的约束在所有声明中是否保持一致,因为不一致的约束会对类型参数(CS0265)使用的类型产生歧义。
  • partial关键字置于类型关键字(classrecordstructinterface)之前,因为语言语法需要此特定排序(CS0267)。
  • 仅对一个部分声明声明主构造函数,因为多个主构造函数会与要使用的构造函数参数和初始化逻辑发生冲突(CS8863)。

为部分结构类型声明多个文件中的字段时,如果内存布局顺序很重要,则应将所有字段声明合并到单个文件中,因为编译器无法保证跨多个文件(CS0282)拆分字段时的特定顺序。 或者,如果布局顺序无关紧要,则可以应用 System.Runtime.InteropServices.StructLayoutAttributeLayoutKind.Auto 值,从而允许运行时自动优化布局。

分部(成员)

  • CS0750 分部成员不能有“abstract”修饰符。
  • CS0751必须在分部 class 或分部 struct 中声明分部成员
  • CS0754分部方法不能显式实现接口方法。
  • CS0763两个分部方法声明必须都是 static,或者两者都不能是 static
  • CS0764两个分部方法声明必须都是 unsafe,或者两者都不能是 unsafe
  • CS8142这两个分部成员声明都必须使用相同的元组元素名称。
  • CS8663分部成员声明都必须为只读,或者两者都不能是只读
  • CS8799这两个分部成员声明必须具有相同的辅助功能修饰符。
  • CS8800分部成员声明必须具有相同的 virtualoverridesealednew 修饰符组合。
  • CS8818分部成员声明必须具有匹配的 ref 返回值。
  • CS8988参数的 scoped 修饰符与分部定义不匹配。
  • CS9275部分类成员必须包含实现代码。
  • CS9276部分成员必须有定义部分。
  • CS9277部分成员不可有多个定义性声明。
  • CS9278部分成员可能没有多个实现声明。

分部成员声明 违反分部方法、属性、索引器和事件的规则时,会发生这些错误。

  • abstract从部分成员中删除修饰符,因为抽象成员需要派生类来提供实现。 此要求与部分成员模式(在实现声明 CS0750 中提供实现)发生冲突。
  • 声明包含 partial 修饰符的类型中的部分成员,因为部分成员只能存在于分部类型(CS0751) 中。
  • 从部分成员中删除显式接口实现,因为两部分声明模式与显式接口实现语法(CS0754)不兼容。
  • 在两个声明中一致地包括或省略 static 修饰符,因为混合静态成员和实例成员将产生关于如何调用成员的歧义(CS0763)。
  • 在两个声明中一致地包括或省略 unsafe 修饰符,因为不一致的不安全上下文可能会导致安全问题或编译错误(CS0764)。
  • 在两个声明中使用相同的元组元素名称,因为不同的名称会导致混淆哪些名称可用于使用代码(CS8142)。
  • 在两个声明中一致地包括或省略 readonly 修饰符,因为混合只读和非只读声明会产生有关成员是否可以修改实例状态(CS8663)的歧义性。
  • 对两个声明使用相同的辅助功能修饰符(例如publicprivateprotectedinternal),因为不同的辅助功能级别会与成员的可见性(CS8799)冲突。
  • 请将virtualoverridesealednew修饰符的相同组合应用于这两个声明,因为这些修饰符控制的继承和多态性行为必须保持一致(CS8800)。
  • 在这两个声明中都使用匹配 ref 的返回修饰符,因为不一致的返回引用行为将创建类型安全问题(CS8818)。
  • scoped 修饰符一致应用于两个声明中的参数,因为此修饰符控制 ref 参数的生存期,并且必须匹配以确保内存安全(CS8988)。
  • 为具有定义声明的每个部分成员提供实现声明,因为部分成员要求这两个部分都完成(CS9275CS9276)。
  • 确保每个部分成员只有一个定义声明和一个实现声明,因为多个声明将创建关于要使用的定义或实现的歧义(CS9277,CS9278)。

分部方法

  • CS0501“member function”必须声明主体,因为它未标记为 abstractexternpartial
  • CS0755两个分部方法声明都必须是扩展方法,或者都不能是扩展方法。
  • CS0756分部方法不能有多个定义声明。
  • CS0757分部方法不能有多个实现声明。
  • CS0759没有为分部方法的实现声明找到定义声明。
  • CS0761method<T> 分部方法的声明具有不一致的类型参数约束。
  • CS0762无法通过方法创建委托,因为该方法是没有实现声明的分部方法
  • CS1067分部声明必须具有顺序相同的相同类型形参名和差异修饰符。
  • CS8796分部方法必须具有辅助功能修饰符,因为它具有非空返回类型。
  • CS8795 分部成员必须有一个实施部分,因为它具有辅助功能修饰符。
  • CS8797分部方法必须具有辅助功能修饰符,因为它具有“out”参数。
  • CS8798分部方法必须具有辅助功能修饰符,因为它具有“virtual”、“override”、“sealed”、“new”或“extern”修饰符。
  • CS8817这两个分部方法声明必须具有相同的返回类型。

分部方法声明 违反分部方法的规则时,会发生这些错误。

  • partial修饰符添加到方法声明或提供方法主体,因为没有实现的方法必须标记为abstractexternpartialCS0501)。
  • 确保这两个声明包含或省略扩展方法语法(this 第一个参数的修饰符),因为混合扩展和非扩展声明会创建不兼容的方法签名(CS0755)。
  • 删除重复定义声明(没有方法主体的声明),因为每个分部方法只能有一个定义(CS0756)。
  • 删除重复实现声明(具有方法主体的声明),因为每个分部方法只能有一个实现(CS0757)。
  • 为每个实现声明添加相应的定义声明,因为具有正文的每个局部方法都必须具有没有正文的匹配签名声明(CS0759)。
  • 确保类型参数约束在两个声明中匹配,因为不一致的约束会针对哪些类型对泛型方法有效(CS0761)产生歧义。
  • 在从方法创建委托之前提供实现声明,因为委托需要具体的方法实现来引用 (CS0762)。
  • 对于泛型分部方法,请确保两个声明使用相同的类型参数名称和方差修饰符,因为不匹配的泛型签名会创建不兼容的方法声明(CS1067)。
  • 当方法返回非public类型时,应添加显式的访问修饰符(例如privateprotectedinternal),因为非 void 的分部方法必须具有已定义的访问权限,以便能够从其他代码中调用(CS8796)。
  • 指定访问修饰符时提供实现声明,因为可访问的局部方法必须具有要调用的实现(CS8795)。
  • 当方法具有 out 参数时添加显式访问修饰符,因为具有 out 参数的方法必须有定义的访问级别以便可调用(CS8797)。
  • 使用virtualoverridesealednewextern修饰符时添加显式辅助功能修饰符,因为这些修饰符会影响方法可见性,并且需要显式辅助功能规范(CS8798)。
  • 确保这两个声明都指定相同的返回类型,因为不同的返回类型会创建不兼容的方法签名(CS8817)。

分部属性

  • CS9248分部属性必须具有实现部分。
  • CS9249分部属性必须具有定义部件。
  • CS9250分部属性可能没有多个定义声明,不能是自动属性。
  • CS9251分部属性不能有多个实现声明
  • CS9252必须实现分部属性访问器,因为在定义部件上声明了它
  • CS9253属性访问器不会实现在定义部件上声明的任何访问器
  • CS9254属性访问器必须与定义部件匹配
  • CS9255两个分部属性声明必须具有相同的类型。
  • CS9257必须同时要求这两个分部属性声明,或者都不需要这两个声明

部分属性或索引器声明可能会导致编译器发出以下警告:

  • CS9256分部属性声明有签名差异。

部分属性或索引器声明 违反部分属性的规则时,会发生这些错误和警告。

  • 为每个定义声明的部分属性提供实现声明,因为部分属性要求这两个部分都完成(CS9248)。
  • 为每个部分属性实现声明提供定义声明,因为每个实现都必须有相应的定义(CS9249)。
  • 删除重复定义声明并避免在实现声明中使用自动属性语法,因为每个分部属性只能有一个定义,实现必须包括显式访问器主体(CS9250)。
  • 删除重复实现声明,因为每个分部属性只能有一个实现(CS9251)。
  • 实现在定义声明中声明的所有访问器,因为实现声明必须为定义中指定的每个访问器(get、set 或 init)提供主体(CS9252)。
  • 从实现声明中删除未在定义部分声明的访问器,因为只能实现在定义部分中声明的访问器(CS9253)。
  • 确保访问器签名在这两个声明(包括访问器类型(get、set 或 init)和任何修饰符之间匹配,因为不一致的访问器定义会创建不兼容的属性声明(CS9254)。
  • 确保这两个声明都指定相同的属性类型,因为不同类型的创建不兼容的属性签名(CS9255)。
  • 确保这两个声明包含或省略 required 修饰符一致,因为混合必需声明和非必需声明会产生有关属性是否必须初始化(CS9257)的歧义。
  • 查看并更正声明和实现声明之间的任何签名不匹配,因为访问修饰符、返回类型或参数列表(对于索引器)的差异可能会导致意外行为(CS9256)。

部分事件和构造函数

  • CS9279部分事件不能有初始化器。
  • CS9280只有部分构造函数的实现声明才能具有初始值设定项。

你在部分构造函数的定义声明或部分事件声明上声明了初始值设定项。 删除初始值设定项。