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

C#如何在父类构造设参数默认值时避免子类重复定义构造函数

解决方案

C# 中父类构造函数的参数默认值不会自动继承到子类构造,你可以通过以下两种方式实现需求:

方案1:子类构造函数同步声明默认值(最常用,适合子类不多的场景)

你只需要在子类构造函数的对应参数上,声明和父类一致的默认值即可,无需额外写多个构造重载:

public abstract class A
{
    public A(int a, int b = 0) { }
} 

public class B : A
{
    // 仅需给参数b添加和父类一致的默认值即可
    public B(int a, int b = 0) : base(a, b) { } 
}

此时你的调用代码可以直接正常运行:

B b1 = new B(1); // 自动传入b=0到父类构造
B b2 = new B(2,1); // 传入自定义的b=1

方案2:泛型工厂统一处理(适合子类数量多的场景)

如果子类数量非常多,不想每个子类都重复写默认值,可以通过工厂类统一封装构造逻辑,一劳永逸:

// 统一工厂类
public static class AInstanceFactory
{
    public static T Create<T>(int a, int b = 0) where T : A
    {
        return (T)Activator.CreateInstance(typeof(T), a, b);
    }
}

// 子类只需保留基础双参构造即可,无需加默认值
public class B : A
{
    public B(int a, int b) : base(a, b) { } 
}

调用方式如下:

B b1 = AInstanceFactory.Create<B>(1);
B b2 = AInstanceFactory.Create<B>(2, 1);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:15:04