我有一些抽象基类可用于多种实现。
基类:
public abstract class BaseX
{
public string A { get; set; }
}
public abstract class BaseY : BaseX
{
public string B { get; set; }
}
对于每个用例,我想从这些基类中创建特定的类,例如:
public abstract SpecificX : BaseX
{
public string C { get; set; }
}
public abstract SpecificY : BaseY
{
public string D { get; set; }
}
从SpecificY
派生的所有类都应包含所有属性A,B,C,D。
我现在的问题是SpecificY
不具有SpecificX
的属性C,因为我不能像这样进行多重继承
public abstract SpecificY : BaseY, SpecificX
我唯一的想法是使用这样的接口:
public Interface ISpecificX
{
string C { get; set; }
}
public abstract SpecificX : BaseX, ISpecificX
{
public string C { get; set; }
}
public abstract SpecificY : BaseY, ISpecificY
{
public string D { get; set; }
public string C { get; set; } <== redundancy
}
但是我需要两次实现C。一旦C变得不仅仅是一个简单的Property,事情就会变得丑陋。有没有更好的方法来创建这种结构?
先谢谢了,
弗兰克
答案 0 :(得分:2)
我强烈建议favour composition over inhertiance-根据政府建议。这样,您就不会继承给定的类,而只是使用它的一个实例。然后,您可以轻松拥有所有属性而无需重复:
class BaseX { ... }
class BaseY { ... }
class SpecificY : BaseY
{
private readonly SpecificX b = new SpecificX();
public string A { get => this.b.A; set => this.b.A = value; } // delegate the call
public string B { get; set; }
public string C { get => this.b.C; set => this.b.C = value; } // delegate the call
public string D { get; set; }
}