继承ContentView的MeasureCompCommon被MeasureMainView继承后出现编译错误求助
解决CS0579和CS0111编译错误
错误原因分析
CS0579(重复特性)
大概率是MeasureMainView的XAML文件对应的自动生成代码中,已默认添加[XamlCompilation(XamlCompilationOptions.Compile)]特性,而你手动编写的代码文件里又重复添加了该特性,导致冲突。
CS0111(重复成员)
常见触发场景:
MeasureMainView的两个partial部分(手动编写的.cs文件、XAML自动生成的.g.cs文件)中,存在名称和参数完全一致的成员定义;- 基类
MeasureCompCommon与子类MeasureMainView中,定义了同名同参数的方法/属性。
另外补充一个潜在功能问题:原基类构造函数中调用Initialized()时,控件还未被添加到父布局,this.Parent会为null,这段逻辑无法正常执行,后续需要调整执行时机。
具体修复步骤
1. 修复CS0579错误
删除MeasureMainView类上手动添加的[XamlCompilation(XamlCompilationOptions.Compile)]特性,Xamarin/.NET MAUI会在XAML对应的自动生成代码中默认注入该特性。
修改后的代码片段:
namespace POP.Component { public partial class MeasureMainView : MeasureCompCommon { DisplayInfo m_MainDisplayInfo = DeviceDisplay.MainDisplayInfo; public MeasureMainView() { InitializeComponent(); InitButton(); } // 其他业务代码 } }
2. 修复CS0111错误
- 检查
MeasureMainView的XAML文件和.cs文件,确保没有重复定义同一成员(比如若InitButton方法在两个部分都有定义,需删除重复项或重命名); - 检查基类
MeasureCompCommon与子类的成员,若存在同名同参数的成员,要么修改子类成员名称,要么将基类成员设为virtual,子类用override重写。
3. 优化基类布局清理逻辑(功能修复)
原遍历代码存在索引偏移bug,且执行时机错误,修改为在OnParentSet方法中执行反向遍历:
namespace POP.Component { public partial class MeasureCompCommon : ContentView { public MeasureCompCommon() { // 移除构造函数中的Initialized调用 } protected override void OnParentSet() { base.OnParentSet(); Initialized(); } private void Initialized() { if (this.Parent is StackLayout sl) { // 反向遍历避免移除元素导致索引混乱 for (int i = sl.Children.Count - 1; i >= 0; i--) { if (sl.Children[i] != this) sl.Children.RemoveAt(i); } } } } }
内容的提问来源于stack exchange,提问作者user19432624
相关产品推荐
相关产品推荐

