You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中子类未设置属性时如何返回父类对应属性值?

解决嵌套主题类访问父类属性的问题

你的代码存在两个核心问题:

  1. 嵌套的TabControlTheme没有持有父Theme实例的引用,无法访问父类的GenericForeColor
  2. 属性定义语法错误,字段和自动属性的写法混在一起了

下面是修正后的完整代码:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 13:18:14