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

如何让派生类重写基类字段的默认值?代码示例疑问

问题解答:让派生类"重写"基类字段的默认值

首先得明确一个核心点:C#里的字段是不支持重写(override)的,你当前代码里用new public string Name = "Hammer"只是在派生类中隐藏了基类的Name字段,这并不是真正的多态重写。所以当你用ItemBase类型的引用(MyThing)去访问Name时,编译器只会识别基类的字段,自然输出"Base"。

要实现你想要的效果(基类引用指向派生类实例时,返回派生类的名称),正确的做法是用属性+多态,具体步骤如下:

1. 将基类的字段改为虚拟属性

把基类里的Name字段改成带virtual修饰符的属性,给派生类留下重写的入口:

public class ItemBase 
{ 
    public virtual string Name { get; } = "Base"; 
}

2. 在派生类中重写该属性

在Hammer类里用override关键字重写Name属性,设置你需要的默认值:

public class Hammer : ItemBase 
{ 
    public override string Name { get; } = "Hammer"; 
}

3. 修正测试代码的小错误

你原测试代码里有个小问题:Console.WriteLine(ItemBase.Name)应该是Console.WriteLine(MyThing.Name)——ItemBase.Name是访问类的静态成员,而你需要的是实例的Name。修正后的测试类:

public class Test 
{ 
    public static void Main()
    {
        ItemBase MyThing = new Hammer(); 
        // 现在会输出"Hammer"
        Console.WriteLine(MyThing.Name); 
    }
}

这样修改后,借助C#的多态特性,当你用ItemBase类型的引用指向Hammer实例时,会自动调用派生类Hammer中重写的Name属性,就能得到你想要的结果了。

内容的提问来源于stack exchange,提问作者Daarwin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:43:45