设计:实现依赖于BaseClass属性的属性

时间:2017-02-01 08:14:26

标签: c# inheritance software-design

我有一个基类:

public abstract class TechObject {
    protected TechObject(FwVersion version) {
        FwVersion = version;
    }

    public FwVersion FwVersion { get; set; }
}

我还有另一个继承这个类的类。

public partial class PositioningAxis : TechObject {
    public PositioningAxis(FwVersion version) : base(version) {
    }
}

在此类我自动生成的属性如下:

public partial class PositioningAxis {
    public int Drive_V3 { get; set; }
    public int Drive_V4 { get; set; }
}

我想要实现的是,当您使用PositioningAxis V4创建类FwVersion的对象时,只有V4的属性可见。

我可以改变我想要的所有课程,但我找不到好的模式。

我不想要的是为每个版本创建类。此外,我不希望用户看到每个版本的TechObject的所有属性。

1 个答案:

答案 0 :(得分:0)

我不知道我的想法是否正确,这可能不是一个好的设计。我可能会选择一个接口然后为每个版本实现一个类,但是,嘿,这就是我将如何做到这一点。那么,这样的事情怎么样:

public class FwVersion
{
    public int Version;
}

public abstract class TechObject
    {
        public FwVersion FwVersion { get; set; }
    }

public partial class PositioningAxis : TechObject
{
    private int Drive_V3
    {
        get; set;
    }
    private int Drive_V4
    {
        get; set;
    }

    public int Drive
    {
        get
        {
            switch (this.FwVersion.Version)
            {
                case 3: return Drive_V3;
                case 4: return Drive_V4;
                default: return -1;
            }
        }
        set 
        {
            switch (this.FwVersion.Version)
            {
                case 3: Drive_V3 = value;
                    break;
                case 4: Drive_V4 = value;
                    break;
            }
        }
    }
}