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
相关产品推荐
相关产品推荐

