C#中子类未设置属性时如何返回父类对应属性值?
解决嵌套主题类访问父类属性的问题
你的代码存在两个核心问题:
- 嵌套的
TabControlTheme没有持有父Theme实例的引用,无法访问父类的GenericForeColor - 属性定义语法错误,字段和自动属性的写法混在一起了
下面是修正后的完整代码:
public class Theme { public Color GenericForeColor { get; set; } = Color.Black; // 设置默认值避免空值异常 public Color GenericBackColor { get; set; } = Color.White; public TabControlTheme TabControls { get; } public Theme() { // 父类构造时初始化子类,传入自身引用 TabControls = new TabControlTheme(this); } public class TabControlTheme { private readonly Theme _parentTheme; private Color? _activeForeColor; // 用可空类型存储自定义值,未设置时为null public TabControlTheme(Theme parent) { _parentTheme = parent; } public Color ActiveForeColor { get => _activeForeColor ?? _parentTheme.GenericForeColor; set => _activeForeColor = value == Color.Empty ? null : value; } } }
关键修改点:
- 给
TabControlTheme添加构造函数,接收并保存父Theme实例的引用 - 父类
Theme的构造函数中初始化TabControls时,传入自身实例 - 用可空
Color?类型存储子类的自定义属性值,未设置时自动返回父类的通用属性 - 优化set逻辑:当设置
Color.Empty时视为清空自定义值,恢复使用父类默认
使用示例:
// 创建主题实例 var theme = new Theme(); // 未设置ActiveForeColor时,返回父类的GenericForeColor Console.WriteLine(theme.TabControls.ActiveForeColor); // 输出Black // 设置自定义颜色 theme.TabControls.ActiveForeColor = Color.Red; Console.WriteLine(theme.TabControls.ActiveForeColor); // 输出Red // 清空自定义颜色,回到父类默认 theme.TabControls.ActiveForeColor = Color.Empty; Console.WriteLine(theme.TabControls.ActiveForeColor); // 输出Black
内容的提问来源于stack exchange,提问作者totalZero
相关产品推荐
相关产品推荐

