c# - 抽象类的子类,总是调用抽象构造函数

标签 c# constructor abstract-class

我有一个抽象类和一个子类

abstract class abstractClass
{
    public int x;

    protected abstractClass(int x)
    {
        this.x = x;
    }
}

class childClass : abstractClass
{
    childClass(int x)
        : base(x)
    {
    }
}

我有很多像这样的子类,其中所有这些类总是通过调用 base(x) 来调用公共(public)构造函数 abstractClass1(int x)构造函数。

当我想向构造函数添加一个新属性时,例如另一个 int y,我必须编辑所有这些类并将 y 添加为参数在每个 child 的构造函数中加上抽象类构造函数。

考虑到我事先知道每个子类都将使用抽象类构造函数并且不会添加任何其他内容,是否有另一种方法可以做到这一点?

最佳答案

这是一个想法:创建一个 AbstractClassParameters 类:

class AbstractClassParameters {
    public int x { get; private set; }
    // add more parameters here
    public AbstractClassParameters(int x) {
        this.x = x;
        // add more initializers here
    }
}

现在您可以将 AbstractClassParameters 的实例传递给抽象类构造函数,每个子类都可以做同样的事情,只需传递它即可。

abstract class abstractClass
{
    public int x;

    protected abstractClass(AbstractClassParameters p)
    {
        this.x = p.x;            
    }
}

class childClass : abstractClass
{
    childClass(AbstractClassParameters p) : base(p) { }
}

添加参数时,只需编辑AbstractClassParameters 类和abstractClass,而不是每个子类。

关于c# - 抽象类的子类,总是调用抽象构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30180460/

相关文章:

c++ - 模板构造函数怪异

javascript - 参数列表周围带有花括号的类构造函数/函数语法

java - 重构具有许多子类的抽象 Java 类

c# - Microsoft.Extensions.DependencyInjection 自动解析对象依赖关系

c# - 如何从 .NET 风格的 TDD 迁移到 Ruby?

c# - 在 ASP.NET Core Web API 3.1+ 中继承路由属性

c# - C# 中是否有带参数约束的泛型构造函数?

c++ - 具有默认实现的抽象工厂设计模式

c++ - 在 C++ 中安全地传递对抽象类的引用

c# - 信号R错误! signalr/negotiate 收到 "403 - Forbidden: Access is denied."错误