如何从抽象类中构造当前的具体类型?

时间:2021-08-01 12:56:41

标签: c# oop inheritance abstract-class

我有一个抽象类 AxisState,有两个具体的子类 XStateYState。它们应该是不可变对象,具有一堆返回不同 AxisState 的方法。这些方法中的大多数都在 AxisState 中完全定义,其中一些是抽象的并在具体的子类中实现。

问题是我需要以某种方式从 AxisState 中完全实现的方法中返回 AxisState 的当前具体子类型的新实例。

我目前正在做的是实现一个方法 abstract AxisState NewStateOfSameType(),它被实现为分别从这些子类型中返回一个新的 XStateYState

public abstract class AxisState {
    public abstract AxisState NewStateOfSameType(/*...*/);
    public abstract AxisState OverloadMethod();
    public abstract AxisState AnotherOverloadMethod();

    public AxisState(int fieldOne, int fieldTwo) {
        // ...
    } 

    public AxisState NextState(/*...*/) {
        // ...
        return NewStateOfSameType(fieldOne, fieldTwo);
    }

    // ...
}

以及 XState/YState 中的实现:

public class XState : AxisState {    
    public XState(int fieldOne, int fieldTwo) : base(fieldOne, fieldTwo) {}
    
    public override AxisState NewStateOfSameType(int fieldOne, int fieldTwo) {
        return new XState(fieldOne, fieldTwo);
    }

    // Abstract methods implemented here
}
public class YState : AxisState {    
    public YState(int fieldOne, int fieldTwo) : base(fieldOne, fieldTwo) {}
    
    public override AxisState NewStateOfSameType(int fieldOne, int fieldTwo) {
        return new YState(fieldOne, fieldTwo);
    }

    // Abstract methods implemented here
}

有没有更简洁的方法来处理这一切,或者有什么方法可以重组整个事情?

0 个答案:

没有答案